iOS11适配-iPhone X

开篇

首先来谈谈iPhone 8 与 iPhone 8Plus的适配点,iPhone X放到后面来说;
现在Xcode 9 已经放出来了,大家最好是升级一下,把手上的项目都跑一跑,这是最直观的法子找到需要适配的地方。

比起以往来,这一次需要改动的东西相对来说少一些,主要是UIScrollView 由于Safe Area这一新特性的提出所带来的一些改变;

UIScrollView 新特性

在iOS11中,如果在页面里用到UICollectionView、UITableView、UIScrollView,出现顶部向下偏移20或者44的情况,如果你的ViewController 绑定了Xib,那么只需要在Xcode9 中重新加一下一模一样的约束就可以解决,如果是手动布局的话那么可以通过下面的宏来适配。

#defineadjustsScrollViewInsets_NO(scrollView,vc)\
do { \
_Pragma("clang diagnostic push") \
_Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \
if ([UIScrollView instancesRespondToSelector:NSSelectorFromString(@"setContentInsetAdjustmentBehavior:")]) {\
[scrollViewperformSelector:NSSelectorFromString(@"setContentInsetAdjustmentBehavior:") withObject:@(2)];\
} else {\
vc.automaticallyAdjustsScrollViewInsets = NO;\
}\
_Pragma("clang diagnostic pop") \
} while (0)

iOS11 之前我们用来禁止scrollView 自动向下偏移64(没有NavBar的情况),是通过设置automaticallyAdjustsScrollViewInsets 为NO来解决的,但是在iOS11 以后,这个API被废弃掉了,取而代之的是UIScrollView 的 ContentInsetAdjustmentBehavior来控制,用来取消偏移的是 UIScrollViewContentInsetAdjustmentNever

iOS11适配-iPhone X_第1张图片
adjust.jpeg

UITableView 新特性

如果你的TableViewStyle为Group,以前不需要设置estimatedRowHeightestimatedSectionFooterHeightestimatedSectionHeaderHeight,这三个属性的值,现在恐怕是不行的,不然每个section之间会自动增加40的间距。解决方案就是将这三个值都设置一个初始值就可以来。

UINavigationBar 新特性

1、TitleView

如果你的NavBar自定了titleView,那么自定义View中千万不要设置 self.translatesAutoresizingMaskIntoConstraints = NO;,不然你的TitleView会因为没有正确的Frame而不显示。

还有一个要注意的就是TitleView左对齐(搜索框),以前的做法是设置一个UIBarButtonItem的宽度为负来实现,现在恐怕只能隐藏原生NavBar,自定义NavBar来实现了。

iPhone X

1、页面充满全屏

默认状态是这样的,看起来是没有什么问题对吧,但是比对一下苹果爸爸推荐的样式设计发现,Statusbar(状态栏)这一部分是黑的可不行。

iOS11适配-iPhone X_第2张图片
iPhone X.png
iOS11适配-iPhone X_第3张图片
苹果推荐的设计样式.png

左边为苹果推荐,右边是不推荐滴。
解决这一问题也比较简单,如果你的LaunchImage放在Assets里面,需要重新生成一个LaunchImage,然后上传一张1125x2436规格的LaunchImage,操作如下:

iOS11适配-iPhone X_第4张图片
new launch.png
iOS11适配-iPhone X_第5张图片
launch1.png

再次打开就会是官方推荐的样式了,至于这样做的原因就是,UIScreen的初始化是根据我们进入的第一个页面去进行参数化调整的,没有iPhone X尺寸的启动图,生成的Frame其实是和iPhone 8的是一样的。

iOS11适配-iPhone X_第6张图片
correct-style.png

所以如果单纯是靠kScreenHeight 来判断在这里是需要区分一下的,以下是iPhone 各个设备的尺寸图。可以通过判断系统版本是否是iOS11 与kScreenHeight == 812来确定设备为iPhone X;

iOS11适配-iPhone X_第7张图片
size.png

ps:还有一种通过MachineModel区分设备型号的方法

@"iPhone10,1" : @"iPhone 8",
@"iPhone10,4" : @"iPhone 8",
@"iPhone10,2" : @"iPhone 8 Plus",
@"iPhone10,5" : @"iPhone 8 Plus",
@"iPhone10,3" : @"iPhone X",
@"iPhone10,6" : @"iPhone X",

其他需要注意的点

在某些App中有类似悬浮按钮的设计,比如这样的


iOS11适配-iPhone X_第8张图片
悬浮.png

辣么,在iPhone X中你就要注意将按钮的Top往上多偏移一些了;

define ZGNavHeight ((kScreenHeight == 812) ? 88 : 64)

define ZGTabHeight ((kScreenHeight == 812) ? 92 : 49)

从safe Area的设计上来看,iPhone X的顶部在64的基础上增加了44,而底部的距离也从原来的49增加到92。


iOS11适配-iPhone X_第9张图片
safe area.png

上面的倒是还好处理,大多是在TabBar遮挡的问题,而下面这些就有些斯巴达了,不仅让程序小哥抓狂,设计师也是心塞的不要不要的。

iOS11适配-iPhone X_第10张图片
bottom.png
iOS11适配-iPhone X_第11张图片
bottom2.jpg

get到了就点个喜欢呗(˶‾᷄ꈊ‾᷅˵)

你可能感兴趣的:(iOS11适配-iPhone X)