自定义TabBar(上,继承自UITabBar)

自定义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。

你可能感兴趣的:(自定义TabBar(上,继承自UITabBar))