一、首页进行iOS11系统的适配。
1.我手中的 iPhone6s更新到了11,发现UITableView 和 UICollectionView 的 页面页脚变宽了。原因是因为 iOS11 默认开启了 self-Sizing, 我们可以通过实现estimatedRowHeight相关的属性来展示动态的内容,实现了estimatedRowHeight属性后,得到的初始contenSize是个估算值,是通过estimatedRowHeight x cell的个数得到的,并不是最终的contenSize,tableView不会一次性计算所有的cell的高度了,只会计算当前屏幕能够显示的cell个数再加上几个,滑动时,tableView不停地得到新的cell,更新自己的contenSize,在滑到最后的时候,会得到正确的contenSize。
self-Sizing在iOS11下是默认开启的,Headers, footers, and cells都默认开启Self-Sizing,所有estimated 高度默认值从iOS11之前的 0 改变为UITableViewAutomaticDimension
由于我们的项目中并没有使用estimateRowHeight 属性,所以页面显示有点问题了。可以使用
self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;
关闭 Self_Sizing,由于项目中使用过多,导致改起来比较麻烦,我写了一个 UITableView的分类
+ (void)load {static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{[self mmhSwizzleMethod:@selector(reloadData) withMethod:@selector(mmh_reloadData) error:nil];});
}- (void)mmh_reloadData {self.estimatedRowHeight= 0;self.estimatedSectionHeaderHeight = 0;self.estimatedSectionFooterHeight = 0;if (@available(iOS 11.0, *)) {self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;}[self mmh_reloadData];
}
2.第一步完成之后,页面基本正确了,但是发现导航条还是会偏差个10像素。原因是 iOS11,新增一个属性 contentInsetAdjustmentBehavior
默认值是 automatic ,用来设置 新增的另一个属性 adjustedContentInset
的行为。
我们把默认值改为 never 不计算内边距。就可以了。
至此,我的iPhone6s显示没有问题了。我用模拟器在 iPhone X上跑了下, 发现 导航条和底部tab都有问题。
二、 iPhone X的适配
由于多了一种尺寸, 启动图就要多一张了,选中 LaunchImage,
勾选 iOS 8.0 and later
导入 1125 * 2436 的启动图。再次运行模拟器,就可全屏显示了。 由于我们的app,是自定义的导航条,iPhone X上 电池条由20 变成了 44 ,所以要进行适配。 做完这一步,页面显示基本没问题了