美文网首页程序员
iPhone X 上tabBar高度有时会变成49的问题

iPhone X 上tabBar高度有时会变成49的问题

作者: uiari | 来源:发表于2018-05-24 14:54 被阅读0次

    首先我们来看下效果图

    Untitled.gif

    下面是设置代码


    Snip20180524_1.png

    产生这种bug操作顺序是 vc->modal一个控制器->dismiss ->push一个控制器

    解决办法:

    1、我看了下美团的处理,如下图:

    Untitled1.gif

    美团的是在push一个VC时保证tabBar的高度不变就行,如果测试不觉得是个bug,可以如此。
    效果如图:


    Untitled2.gif

    代码如下图:


    Snip20180524_2.png
    Snip20180524_3.png

    首先自定义tabBarVC 在viewWillLayoutSubviews中设置tabBar的frame即可。

    下面看下第二种解决办法!!!

    2、使用navVC包tabBarVC

    效果如图


    Untitled3.gif

    代码如图:


    Snip20180524_4.png
    注意的是:tabBarVC的子控制器不能用nav包住

    3、自定义tabBar

    @implementation HMTabBar
    {
        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];
    }
    
    
    @end
    
    #import "HMTabBarVC.h"
    #import "HMTabBar.h"
    
    #define kTabBarHeight ([[UIApplication sharedApplication] statusBarFrame].size.height>20?83:49)
    
    @interface HMTabBarVC ()
    
    @end
    
    @implementation HMTabBarVC
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
        
        HMTabBar *tabBar = [[HMTabBar alloc] init];
        
        [self setValue:tabBar forKey:@"tabBar"];
        
    }
    
    //- (void)viewWillAppear:(BOOL)animated {
    //    [super viewWillAppear:animated];
    //    [self.navigationController setNavigationBarHidden:YES animated:YES];
    //}
    
    //- (void)viewWillLayoutSubviews {
    //    [super viewWillLayoutSubviews];
    //
    //    self.tabBar.frame = CGRectMake(0, [UIScreen mainScreen].bounds.size.height - kTabBarHeight, [UIScreen mainScreen].bounds.size.width, kTabBarHeight);
    //
    //}
    
    @end
    

    参考:https://www.jianshu.com/p/35922343281b

    相关文章

      网友评论

        本文标题:iPhone X 上tabBar高度有时会变成49的问题

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