你是否真正的适配了iPhoneX?

2019-03-05  本文已影响0人  何大叔

总结

最初适配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);}];

不足之处请指教!!!

上一篇 下一篇

猜你喜欢

热点阅读