美文网首页
Tabbar出现图片和文字重叠-iPhoneX

Tabbar出现图片和文字重叠-iPhoneX

作者: 快乐的tomato | 来源:发表于2018-05-25 10:47 被阅读643次
    问题:

    最近在做iPhone X的适配,出现了一个很奇怪的现象,如图:

    image.png

    但是这个bug不是必现的,是在present某一个VC,diss之后出现的。

    原因:

    去网上查了下原因:
    在iPhone X设备带有tabBar的页面,如果控制器的hidesBottomBarWhenPushed属性为YES,进行push操作之后,便会出现如下的一些问题,于是我查看了一次苹果系统的一些应用,发现它们是不隐藏tabBar的,估计是苹果就是不希望我们去隐藏它的tabBar
    。。。。。。。。
    具体原因正在探究,
    不过我的项目里确实用的是系统的UITabBarController

    解决方法:

    直接上代码:
    1、自定义一个UITabBar:

    .h文件
    @interface BaseTabar : UITabBar
    
    @end
    
    .m文件
    @implementation BaseTabar
    
    {
        UIEdgeInsets _oldSafeAreaInsets;
    }
    
    - (instancetype)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
            _oldSafeAreaInsets = UIEdgeInsetsZero;
        }
        return self;
    }
    
    - (void)awakeFromNib {
        [super awakeFromNib];
        
        _oldSafeAreaInsets = UIEdgeInsetsZero;
    }
    
    - (void)safeAreaInsetsDidChange {
        [super safeAreaInsetsDidChange];
        
        if (!UIEdgeInsetsEqualToEdgeInsets(_oldSafeAreaInsets, self.safeAreaInsets)) {
            [self invalidateIntrinsicContentSize];
            
            if (self.superview) {
                [self.superview setNeedsLayout];
                [self.superview layoutSubviews];
            }
        }
    }
    
    - (CGSize)sizeThatFits:(CGSize)size {
        size = [super sizeThatFits:size];
        
        if (@available(iOS 11.0, *)) {
            float bottomInset = self.safeAreaInsets.bottom;
            if (bottomInset > 0 && size.height < 50 && (size.height + bottomInset < 90)) {
                size.height += bottomInset;
            }
        }
        
        return size;
    }
    
    
    - (void)setFrame:(CGRect)frame {
        if (self.superview) {
            if (frame.origin.y + frame.size.height != self.superview.frame.size.height) {
                frame.origin.y = self.superview.frame.size.height - frame.size.height;
            }
        }
        [super setFrame:frame];
    }
    

    2、自定义一个UITabBarController

    1、导入头文件#import "BaseTabar.h"
    
    - (void)viewDidLoad {
        [super viewDidLoad];
      
    //如果是iPhone X机型
    
        if (IS_IPHONE_RONG_X) {
            ADLCBaseTabar *baseTabBar = [[ADLCBaseTabar alloc] init];
            [self setValue:baseTabBar forKey:@"tabBar"];
        }
        self.tabBar.tintColor = [UIColor redColor];
    }
    
    

    参考文章:
    iPhone X push操作后tabBar偏移问题
    https://stackoverflow.com/a/47225653/1553324

    相关文章

      网友评论

          本文标题:Tabbar出现图片和文字重叠-iPhoneX

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