TabBar
1、UITabBarController的tabBar可以通过设置hidden隐藏。
2、创建UITabBarController的子类比如RCTabBarController,实现- tabBar:willBeginCustomizingItems:
,会发现这个方法在点击More按钮显示的页面(More按钮在UITabBarController的viewControllers超过5个时显示),点击该页面的“Edit”按钮弹出一个右上角带有“Done”按钮的视图时(出现这个视图时,可以拖动底下UITabBar的各个tab交换位置,然后“- tabBar:didEndCustomizingItems:changed:”的changed会返回YES),会调用这个方法。如果RCTabBarController设置了delegate实现了- tabBarController:willBeginCustomizingViewControllers:
时,这个“tabBarController:xxx”方法并不会调用,只有当RCTabBarController没有实现- tabBar:willBeginCustomizingItems:
时才会调用。
3、给UITabBarController的tabBar设置delegate或者发送beginCustomizingItems(比如在RCTabBarController的实现文件中调用“[self.tabBar beginCustomizingItems:@[item1, item2, item3]];”),都会崩溃,原因“Directly modifying a tab bar managed by a tab bar controller is not allowed.”。
4、由于UITabBarController的tabBar大小不能改变,每个item样式只有图片和文字且无法添加动画效果(UITabBarItem其实是一个NSObject而不是UIView,所以没有途径获取其中的图片和文字视图),所以特殊的底部标签栏要通过自定制TabBar实现。如果自定制TabBarController,则也许需要添加UIViewController分类实现tabBarController、hidesBottomBarWhenPushed等相关方法,还有状态保存等UITabBarController自带的功能都需要自己实现,如果用不到这些功能就暂时不实现;如果继承UITabBarController,需要隐藏自带的UITabBar然后使用自定制的TabBar,而且UITabBarController自带一个不需要的moreNavigationController,还有UITabBarController与UITabBar相关的属性方法都需要修改。