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

首先我们来看下效果图

iPhone X 上tabBar高度有时会变成49的问题_第1张图片
Untitled.gif

下面是设置代码


iPhone X 上tabBar高度有时会变成49的问题_第2张图片
Snip20180524_1.png

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

解决办法:

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

Untitled1.gif

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


iPhone X 上tabBar高度有时会变成49的问题_第3张图片
Untitled2.gif

代码如下图:


iPhone X 上tabBar高度有时会变成49的问题_第4张图片
Snip20180524_2.png

iPhone X 上tabBar高度有时会变成49的问题_第5张图片
Snip20180524_3.png

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

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

2、使用navVC包tabBarVC

效果如图


iPhone X 上tabBar高度有时会变成49的问题_第6张图片
Untitled3.gif

代码如图:


iPhone X 上tabBar高度有时会变成49的问题_第7张图片
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的问题)