适配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