适配iOS 11 与 iPhone X

作者: 這Er | 来源:发表于2017-09-19 10:41 被阅读1595次

    我的项目不是个性化的特别厉害,做一些简单的操作基本上就完成了新系统和机型的适配工作,碰到问题会持续更新此文章

    适配iOS 11

    Xcode 9 增加了@available(iOS 11, *) 的用法,很方便

    if (@available(iOS 11, *)) {
            NSLog(@"这是iOS 11");
        }
    
        // 适配 iOS 11, 如果打包的 Xcode �版本是9的话,可以替换为@available(iOS 11, *) 来判断
        if ([[[UIDevice currentDevice] systemVersion] doubleValue] >= 11.0) {
            // 不主动设置此处为0的话,cell 和 SectionHeader、 SectionFooter 的高度 会不走代理方法
            self.tableView.estimatedSectionHeaderHeight = 0;
            self.tableView.estimatedSectionFooterHeight = 0;
            self.tableView.estimatedRowHeight = 0;
            // UIViewController 的 automaticallyAdjustsScrollViewInsets 属性已经不使用,换为下面属性
            self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
        }
    

    如何适配iPhone X

    注意:iPhone X 的导航栏高度为44, 状态栏高度44, Tabbar 高度83

    1. 叫UI设计师帮你切一张 1125x2436 的图
    2. 将原先项目Assets中的LaunchImage保存一下
    3. 新建一个LaunchImage,将原LaunchImage中的图拖回原位,然后将 1125x2436 的图放入 iPhone X Portrait iOS 11+ 的位置
    4. 如果你使用的是原生的Tabbar和导航控制器,此时基本已经适配完成
    image.png
    大家可能碰到 iPhone X 的模拟器打印 [UIScreen mainScreen].bounds.size.height 的值为 667 的问题

    这种问题就是 LaunchImage 中没有 iPhone X Portrait iOS 11+ 图片导致的,大家添加上,即可恢复正常

    常用的宏定义

    判断iPhone X
    #define IS_IPHONEX (([[UIScreen mainScreen] bounds].size.height - 812) ? NO : YES)

    Tabbar默认高度
    #define kTabBarHeight ((IS_IPHONEX) ? 83 : 49)

    状态栏默认高度
    #define kStatusBarHeight ((IS_IPHONEX) ? (44) : (20))

    相关文章

      网友评论

        本文标题:适配iOS 11 与 iPhone X

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