iOS11以后,自定义tabBar会出现重影问题,之前的两种方法都无法解决:
//之前解决重影问题的方法一:重写导航控制器的方法进行拦截
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
for (UIView *tabBar in self.tabBarController.tabBar.subviews) {// 删除系统自带的tabBarButton
if (![tabBar isKindOfClass:[BYMainTabBarView class]]) {
[tabBar removeFromSuperview];
}
}
}
//之前解决重影问题的方法二:在自定义的tabBar控制器中删除
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
//删除非自定义的tabBar(即删除系统的UITabBarButton)
for (UIView *child in self.tabBar.subviews) {
if (![child isKindOfClass:[BYMainTabBarView class]]) {
[child removeFromSuperview];
}
}
}
//这两种方法,只能保证tabBar栏的几个控制器之间跳转不会重影;一旦点击了其他二级控制器,回到tabBar时就会出现重影的问题
最新的解决方式为:将上面两种方法都舍弃掉,在自定义的tabBar控制器中添加以下代码:
- (void)viewWillLayoutSubviews{//每次layout时都删除一次
[super viewWillLayoutSubviews];
//删除非自定义的tabBar(即删除系统的UITabBarButton)
for (UIView * view in self.tabBar.subviews){
if (![view isKindOfClass:[BYMainTabBarView class]]) {
[view removeFromSuperview];
}
}
}
网友评论