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 ,所以要进行适配。 做完这一步,页面显示基本没问题了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值