总结
最初适配iPhone X的时候,我的想法很简单:
iPhone X嘛,无非就是状态栏和tabbar的高度发生了变化,多了一个home_indicator而已,几个宏就搞定了:
// 判断是否是iPhone X#defineiPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)
// 状态栏高度 #defineSTATUS_BAR_HEIGHT (iPhoneX ? 44.f : 20.f)
// 导航栏高度 #defineNAVIGATION_BAR_HEIGHT (iPhoneX ? 88.f : 64.f)
// tabBar高度#defineTAB_BAR_HEIGHT (iPhoneX ? (49.f+34.f) : 49.f)
如果我们只简单的以上处理,实现tableView是这样的:
[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(myAddressLabel.mas_bottom); make.left.right.bottom.mas_offset(0);}];
现而易见当tableview滚动到最底部的时候最后一个cell会被遮盖
于是我针对iOS 11调整了一下约束
[self.tableViewmas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(myAddressLabel.mas_bottom);
make.left.right.mas_offset(0);
if(@available(iOS11.0, *)) {
make.bottom.mas_equalTo(self.view.mas_safeAreaLayoutGuideBottom);
}else{
make.bottom.mas_equalTo(self.view);
}}];
但是滚动tableView的时候又尴尬了:
真正的适配iPhone X,是滚动的时候全屏滚动(如第一张GIF),滚到底的时候最后一个cell也不会被home_indicator挡住。
而我们真正想要的效果应该是如下:
1、在AppDelegate.m中加上这段代码:
if(@available(iOS11, *)) { [UIScrollViewappearance].contentInsetAdjustmentBehavior =UIScrollViewContentInsetAdjustmentNever;}
关于contentInsetAdjustmentBehavior:
自己翻译:是否根据安全区域调整偏移量,默认是自动调整的。
关于安全区域推荐一篇文章https://www.jianshu.com/p/63c0b6cc66fd
[UIScrollView appearance].contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever这句话的意思就是所有scrollView的偏移量不随安全区域而调整。
这就是项目里的scrollView翻到底的时候最后一个cell会被home_indicator挡住的原因。
又因为contentInsetAdjustmentBehavior的默认值是UIScrollViewContentInsetAdjustmentAutomatic,所以小demo里tableView自动调整了偏移量,因此翻到底的时候最后一个cell不会被home_indicator挡住。
所以要解决项目里的tableView的显示问题,只需要将这个tableView的contentInsetAdjustmentBehavior改为UIScrollViewContentInsetAdjustmentAutomatic:
if(@available(iOS11.0, *)) {self.tableView.contentInsetAdjustmentBehavior =UIScrollViewContentInsetAdjustmentAutomatic;}[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo(myAddressLabel.mas_bottom); make.left.right.bottom.mas_offset(0);}];
不足之处请指教!!!
网友评论