如下图效果图:
我觉得挺好看的,哈哈哈
分析:
如果我们直接调用系统的API,一个一个控制器添加到tabbar中,效果会是这样
好丑!,原因是本来图标大小不合适,而且系统会帮你渲染。
我这里是通过KVC方法修改了系统的UITabbar,使用自定义的Tabbar
//在ABTabbarControl.m文件中,继承与UITabbarControl //在创建一个ABTabbar,继承与UITabbar //在viewdidLoad方法中替换系统的Tabbar override func viewDidLoad() { super.viewDidLoad() setupUI() setupNav() setupTabBar() } func setupTabBar(){ let tabbar = ABTabbar() setValue(tabbar, forKey: "tabBar") }
我的思路是这样的,先把中间那个按钮不加入tabbar中,而是通过重写它的layoutSubview方法在加入进去
然后在ABTabbar重写它的layoutSubview方法
import UIKit class ABTabbar: UITabBar { //创建中间的那个按钮 lazy var plusButton : UIButton = { let btn = UIButton.init(type: UIButtonType.Custom) btn.setImage(UIImage(named: "icon_tabBar_speedy_menu_selected"), forState: .Normal) btn.setImage(UIImage(named: "icon_tabBar_speedy_menu"), forState: .Selected) btn.sizeToFit() self.addSubview(btn) return btn }() override func layoutSubviews() { super.layoutSubviews() let count = (items?.count)! + 1 var x : CGFloat = 0.0 let y : CGFloat = 0.0 let w : CGFloat = bounds.size.width / CGFloat(count) let h : CGFloat = bounds.size.height var num = 0 for item in self.subviews{ //判断是否为button if !item.isKindOfClass(NSClassFromString("UITabBarButton")!) {continue} // 留一个位置给中间的button if num == 2 {num = 3} x = CGFloat(num) * w item.frame = CGRectMake(x, y, w, h) num = num + 1 } //这是给中间的button设置frame,在中间的位置, //我在Y值上减了15, 这样它的位置会稍微移上一点,感觉很好看 self.plusButton.center = CGPointMake(self.frame.size.width * 0.5 ,(self.frame.size.height * 0.5 - 15)) } }
时间: 2024-10-06 00:07:19