自定义TabBar在实际项目当中经常使用,实现起来也比较容易。
比如新浪微博的tabBar,如下
具体的代码实现步骤:
两步即可:
一:
1,先自定义一个SinaTabBar继承自系统的UITabBar
2,在SinaTabBar中,重写init初始化方法
override init(frame: CGRect) {
//先实现父类方法
super.init(frame: frame)
//再添加要加入到tabBar上的按钮centerButton
addSubview(centerButton)
}
3,重写layoutSubviews方法,在这个方法中给所有的子控件设置frame
override func layoutSubviews() {
//先实现父类方法
super.layoutSubviews()
//设置centerButton在tabBar上面的位置,我这里设置的是中间的位置
centerButton.center = CGPoint(x: bounds.width * 0.5, y: bounds.height * 0.5)
//这是tabBar上的所有按钮子控件的个数
let buttonCount = 5
//每个按钮子控件的宽度
let buttonWidth = bounds.width / CGFloat(buttonCount)
//声明的一个索引变量
var index = 0
//遍历所有的子控件
for subview in subviews {
//判断是否是按钮子控件,如果是,则设置frame。
//tabBar上面的原生按钮的类型是UITabBarButton,它是apple的私有类
if subview.isKind(of: NSClassFromString("UITabBarButton")!) {
//设置每个按钮的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,很简单吧,希望能帮助到需要的同学。如果这种方法不能满足项目的需求,那么接下来请看自定义TabBar2。