美文网首页
完美解决iPhoneX, iphoneX Max自定义tabBa

完美解决iPhoneX, iphoneX Max自定义tabBa

作者: 咚东咚 | 来源:发表于2018-11-26 18:22 被阅读0次

在iOS开发中,底部的tabBar通常都是需要自定义,因为系统自带的或多或少和我们要求的总有一点的出入。
在自定义tabBar后,通常做法就是移除系统的tabBar来防止出现重影的问题。
在iPhoneX之前我们通常都是在导航中使用这样的方法来移除系统的tabBar的。
方法一:在自定义的UINavigationController中的下面方法中这样写:


图1.png
- (void)navigationController:(UINavigationController*)navigationController willShowViewController:(UIViewController*)viewController animated:(BOOL)animated{   
 // 删除系统自带的tabBarButton   
 for (UIView *tabBar in self.tabBarController.tabBar.subviews) {       
         if ([tabBar isKindOfClass:NSClassFromString(@"UITabBarButton")]) {           
                [tabBarremoveFromSuperview];       
         }
     }
 }

方法二:或者在自定义的TabBarController中的下面方法中这样写:

图2.png

视图即将出现时进行删除。
效果自然能够实现。因为这是在iphoneX,iphoneX Max之前最常用的消除系统系统tabBar的方法。
但是!在iphoneX,iphoneX Max之后,我们在适配的时候,如果还是只加上这些代码的话,在进入初始界面的时候,并没有发现什么问题(正常)。如图3:

图3
- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    for (UIView *tabBar in self.tabBarController.tabBar.subviews) {
        if([tabBar isKindOfClass:NSClassFromString(@"UITabBarButton")]){
            [tabBar removeFromSuperview];
        }
    }
}

但当进入二级页面再返回后就会发现变成如下图4所示样式了:

图4

解决方法:

在自定义的TabBarController中。添加删除系统tabBar的代码。具体如下 图5:


图5
// 解决iphoneX在返回时候tabb出现重影的问题
- (void)viewWillLayoutSubviews{   
    [super viewWillLayoutSubviews];   
    for (UIView *view in self.tabBar.subviews) {       
        if(![viewisKindOfClass:[MainTabBarclass]]) {           
            [viewremoveFromSuperview];       
        }   
    }
}

这样就完美解决了iphoneX,iphoneX Max上,在返回时候tabb出现重影的问题。
大概原理:在iphoneX,iphoneX Max中,系统的控件(似乎是)只能隐藏,不能删除,再返回的时候,系统会自动判断,添加已删除的系统控件。(具体的真实性有待研究)。
这两者的代码区别是,前者我们只删除一次,后者是在前者基础上再删除一次,以防出现的时候不能删除,在viewWillAppear中删除只是保证删除一次。所以要进行多次删除。
这样多次删除会不会把本来不存在的删除会出现空指针访问错误?
不会的。因为我们是遍历他的子控件时是发现有才去删除,所以并不会删除不存在的东西。
到此,iPhoneX自定义tabBar造成的重影问题完美解决。

相关文章

网友评论

      本文标题:完美解决iPhoneX, iphoneX Max自定义tabBa

      本文链接:https://www.haomeiwen.com/subject/nwfiqqtx.html