方法二:自定义TabBar
上述方法唯一的问题是,当你想设置item的选定背景时:
self.tabBar.selectionIndicatorImage = UIImage(named: "TabBarBGSel")
背景图不能铺满整个item,两边会有空隙(如果大家有更好的方法解决可以留言,谢谢),如图:
这个时候需要自定义TabBar,首先声明一个UIButton用来记录当前选中的Button:
复制代码var selectButton: UIButton!
在viewDidLoad()方法的底部加入以下代码:
复制代码
// 先记录下Controller自带的tabBar的frame
let rect = self.tabBar.frame
// 移除Controller自带的TabBar
self.tabBar.removeFromSuperview()
// 用记录下的frame建立一个UIView
let myView = UIView(frame: rect)
// 设置这个View的背景色
myView.backgroundColor = UIColor(patternImage: UIImage(named: "TabBarBG")!)
self.view.addSubview(myView)
for var i = 0; i < self.viewControllers?.count; i++ {
let button = UIButton()
// 根据子ViewController的个数计算Button的宽度
let width = myView.frame.size.width / CGFloat(self.viewControllers!.count)
let x = CGFloat(i) * width
button.frame = CGRectMake(x, 0, width, myView.frame.size.height)
// 设置Button未选中时候的图标
let image = UIImage(named: "TabBar(i)")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
button.setImage(image, forState: UIControlState.Normal)
// 设置Button选中时候的图标,注意这里Button的状态是Selected,而不是Highlighted
let selImage = UIImage(named: "TabBar(i)Sel")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
button.setImage(selImage, forState: UIControlState.Selected)









