适配iPhoneX

作者: uniapp | 来源:发表于2017-11-30 15:23 被阅读0次

    借着把玩新机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跳转, 是我们常常遇到的场景:


    self.navigationItem.title = @"SecondViewController";

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


    iPhone8

    iPhoneX中为:


    iPhoneX

    明显看到back被UINavigationBar所遮盖。

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

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

    相关文章

      网友评论

        本文标题:适配iPhoneX

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