适配iPhoneX

借着把玩新机iPhoneX的机会,对iPhoneX应用中增高的UINavigationBar进行了详细的学习。应用适配iPhoneX, 也主要是适配UINavigationBar的变化。

在iPhoneX和iPhone8上运行以下代码:

#define ScreenSize [UIScreen mainScreen].bounds.size
- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationController.navigationBar.translucent = false;
    UINavigationBar *navBar = self.navigationController.navigationBar;
     ;
    
    navBar.barTintColor = [UIColor greenColor];
    NSLog(@"statusBarFrame: %@", NSStringFromCGRect([UIApplication sharedApplication].statusBarFrame));
    NSLog(@"navBar: %@", NSStringFromCGRect(navBar.frame));
    NSLog(@"width: %f", ScreenSize.width);
    NSLog(@"height: %f", ScreenSize.height)    
}

iPhoneX中的结果:

statusBarFrame: {{0, 0}, {375, 44}}
navBar: {{0, 44}, {375, 44}}
width: 375.000000
height: 812.000000

iPhone8中的结果:

statusBarFrame: {{0, 0}, {375, 20}}
navBar: {{0, 20}, {375, 44}}
width: 375.000000
height: 667.000000

可以看到iPhoneX中statusBarFrame增加了44-20=24个点的高度。我们知道,iPhoneX以前开发中,导航栏navigationBar的高度为44,状态栏statusBar的高度为20。在自定义navigationBar的页面,自定义的View只要以相对于顶部为64个点的高度放置即可,而在iPhoneX中就需要变成88个点。

项目中通过UINavigationController跳转, 是我们常常遇到的场景:


适配iPhoneX_第1张图片
self.navigationItem.title = @"SecondViewController";

其中第二个页面SecondViewController在iPhone8中的渲染情况:


适配iPhoneX_第2张图片
iPhone8

iPhoneX中为:


适配iPhoneX_第3张图片
iPhoneX

明显看到back被UINavigationBar所遮盖。

综上,iPhoneX中的UINavigationBar高度为88。以前以相对顶部偏移64的高度设置frame的View会显示不正常。而以相对布局(masonry、auto-layout)设置的界面会自动调整。另外,当UINavigationBar的translucent(透明度)属性设置为false时,应用也会识别出UINavigationBar高度的变化而正常显示。

喜欢和关注都是对我的鼓励和支持~

你可能感兴趣的:(适配iPhoneX)