#26 Swift — UITabBarController外觀(item, tintColor, badge, TextAttribute)

Stephen Huang
Oct 22, 2022

對swift原生UITabBarController的研究。

Xcode版本:13.2.1, iOS版本支援13以上。

UITabBarController 為一個TabBarController及底下的item組成,
每個item可連接到一個ViewController(也可以是UITableViewController之類的)。

我們將三個畫面都連接到各自的controller,並命名為
TabBarViewController
TabItem1ViewController
TabItem2ViewController

TabBarViewController

打開TabBarViewController的頁面,它已繼承UITabBarController的屬性
直接呼叫tabBar就會指向storyboard中的tabBar,不需再手動連接

這個在tabBarItem上也有一樣的效果,可直接在viewController裡面呼叫tabBarItem。

TabBar

那我們對原生的TabBar能控制的外觀樣式有多少呢?

1TabBarViewController

// bar透明嗎tabBar.isTranslucent = false// 文字跟圖像的顏色tabBar.tintColor = .orange// 背景顏色tabBar.backgroundColor = UIColor.cyan// 沒被選到bar物件的顏色tabBar.unselectedItemTintColor = UIColor.systemPink// 個別item的圖示// item1
tabBar.items?[0].image = UIImage(systemName: "square")!
// item2
tabBar.items?[1].image = UIImage(systemName: "rectangle")!
// 被選到的item的圖示tabBar.selectionIndicatorImage = UIImage(systemName: "moon.fill")!
// item的相對位置(置中或均分)
tabBar.itemPositioning = .centered// item的寬度tabBar.itemWidth = 50// item與item之間的間距tabBar.itemSpacing = 5

以上在模擬機iPhone 13 Pro 15.2執行起來會長成這樣

選的頁面是item1

2TabItem1ViewController

在item的viewController可控的設定為

// item的image
tabBarItem.image = UIImage(systemName: "square")!
// 標題位置偏移tabBarItem.titlePositionAdjustment = UIOffset(horizontal: 5, vertical: 20)// 右上角標示框內容tabBarItem.badgeValue = "badge"// 右上角標示框顏色tabBarItem.badgeColor = .black// 右上角標示框的text屬性及item狀態/// item狀態分為/// normal -> 沒被選上/// selected -> 被選上tabBarItem.setBadgeTextAttributes([NSAttributedString.Key.foregroundColor:UIColor.yellow], for: UIControl.State.normal)tabBarItem.setBadgeTextAttributes([NSAttributedString.Key.foregroundColor:UIColor.brown], for: .selected)
選的頁面是item1

--

--