我的项目不是个性化的特别厉害,做一些简单的操作基本上就完成了新系统和机型的适配工作,碰到问题会持续更新此文章
适配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
- 叫UI设计师帮你切一张
1125x2436
的图 - 将原先项目Assets中的LaunchImage保存一下
- 新建一个LaunchImage,将原LaunchImage中的图拖回原位,然后将
1125x2436
的图放入iPhone X Portrait iOS 11+
的位置 - 如果你使用的是原生的Tabbar和导航控制器,此时基本已经适配完成
大家可能碰到 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))