您的位置:首页 > 移动开发 > IOS开发

iOS10自定义tabBar出错

2017-01-20 16:11 337 查看
今天在自定义tabBar的时候,采用了下面的形式



按钮A和C是同样的功能,B按钮是另一个不同的功能,比如modal一个控制器之类的..

然后采取的方式是A和C采用自定义的Button,B采用系统的Button,然后在自定义的tabBar中进行了layoutsubviews中进行了重新布局!

/**题外话

一开始我是想重新用一个View添加到tabBarController的View上,自己制作一个tabbar,但是在导航栏Push出新控制器时不方便隐藏底部控制条,

因为是自己写的view,所以hidesBottomBarWhenPushed不起作用,个人的想法法是在导航类中重写pushViewcontroller方法,然后在里面发送通知,

tabbarController接收到通知设置底部view 的动画,然后因为无法获取系统push动画的时间,所以需要在重写pushViewController中设置自己的push动画,

当然这只是个初步的想法!没有实现...

*/

然后在tabBarController中的viewWillAppear中移除系统的tabBarButton,然后尴尬的发现现实的情况是下面这样的


可以看见地下生成了系统的按钮,但是中间的按钮并没有生成,然而从下图中可以看见实际上中间也生成了一个按钮的!



然后我又尝试了在viewWillAppear中移除系统的tabBarButton,但是系统还是生成了按钮覆盖!然后就考虑在viewDidAppear中移除,但是



只要一点最后一个按钮中间那个按钮上就会产生一个系统产生的按钮,然后就将中间的按钮覆盖了!

然后各种断点各种查找都没找到产生这种现象的原因,在网上有些人说因为iOS10一下tabBar内部layoutsubviews进行了系统布局的问题,

然而我手里的教程是很久以前万能商城上买的,那份代码运行起来完全没有问题...

最后终于在简书上找到了答案!

原来,每个控制器都有标题,因为有导航栏和tabBar的存在,所以系统便利的提供了一个title属性,便于大家设置标题,

于是我也就习惯的使用

[objc] view
plain copy

self.title = @"我";  

然后系统会很温馨得帮你检测,看看你的导航栏标题是什么,不管是什么都改成你设置的值,

然后看看你的tabBar(如果有的话,前面使用自定义的View是没有问题的),针对这个控制器,你的tabBarButton是不是标题也是这个值,

如果不是,或者没有,系统就自动给你添加一个,于是就产生了覆盖!

但是因为我的是代码写就,就算在viewWillAppear中移除所有按钮,并且各个控制器都只设置navigationItem.title,系统还是会默认生成透明的tabBarButton,

所以,最终结论:由于个人知识范围有限,目前的方法是在viewDidAppear中移除tabBarbutton,然后各个控制器单独设置navigationItem.title

如果大家有更好的方式,请一定留言指教!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息