自定義TabBar在實際項目當(dāng)中經(jīng)常使用哼转,實現(xiàn)起來也比較容易。
比如新浪微博的tabBar,如下
具體的代碼實現(xiàn)步驟:
兩步即可:
一:
1桑腮,先自定義一個SinaTabBar繼承自系統(tǒng)的UITabBar
2,在SinaTabBar中,重寫init初始化方法
override init(frame: CGRect) {
//先實現(xiàn)父類方法
super.init(frame: frame)
//再添加要加入到tabBar上的按鈕centerButton
addSubview(centerButton)
}
3本辐,重寫layoutSubviews方法,在這個方法中給所有的子控件設(shè)置frame
override func layoutSubviews() {
//先實現(xiàn)父類方法
super.layoutSubviews()
//設(shè)置centerButton在tabBar上面的位置医增,我這里設(shè)置的是中間的位置
centerButton.center = CGPoint(x: bounds.width * 0.5, y: bounds.height * 0.5)
//這是tabBar上的所有按鈕子控件的個數(shù)
let buttonCount = 5
//每個按鈕子控件的寬度
let buttonWidth = bounds.width / CGFloat(buttonCount)
//聲明的一個索引變量
var index = 0
//遍歷所有的子控件
for subview in subviews {
//判斷是否是按鈕子控件慎皱,如果是,則設(shè)置frame叶骨。
//tabBar上面的原生按鈕的類型是UITabBarButton茫多,它是apple的私有類
if subview.isKind(of: NSClassFromString("UITabBarButton")!) {
//設(shè)置每個按鈕的frame
subview.frame = CGRect(x: buttonWidth * CGFloat(index), y: 0, width: buttonWidth, height: bounds.size.height)
index += 1
if index == 2? {
//中間的位置留給centerButton
index += 1
}
}
}
}
至此,第一步完成忽刽,有個自定義樣式的tabBar天揖,
二:
在tabBarController控制器中,通過KVC給tabBarController的只讀屬性tabBar賦值即可缔恳。
//自定義tabBar
let sinaTabBar = SinaTabBar()
tabBarController.setValue(sinaTabBar, forKey: "tabBar")
上面兩步就完成了自定義樣式的tabBar宝剖,很簡單吧,希望能幫助到需要的同學(xué)歉甚。如果這種方法不能滿足項目的需求万细,那么接下來請看自定義TabBar2。