iOS11 和 iPhone X 的适配
一、首页进行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 ,所以要进行适配。 做完这一步,页面显示基本没问题了
推荐阅读
-
iOS11 和 iPhone X 的适配
-
iOS 11 与 iPhone X的适配那些事
-
适配iOS11和iPhone X的经验总结
-
iOS11适配 以及会遇到的坑
-
【转载】连续赋值和内存指针的问题解析(a.x=a={n:2})
-
EJB3.0 @Column设置precision和scale转换ORACLE中的Number(x,y) 博客分类: EJB3.0oracle EJBORACLE
-
verilog 语言[N:0]和[0:N]定义变量方法、比较大小以及不定值x用于if语句中的处理
-
Android的分辨率和屏幕适配详解
-
Android的分辨率和屏幕适配详解
-
Android M(6.x)使用OkHttp包解析和发送JSON请求的教程