iPhoneX适配都在这儿了
屏幕特点
1. 3x scale
2.宽高 375 x 812 points 注意横屏时候,horizontalSizeClass 依然是 compact
3.屏幕多处圆角,以及感应器部位,屏幕底部有home switcher indicator(那条横线)
内容排版注意事项:
1.内容排版时应将按钮及重要的内容避开圆角,感应器区域,home indicator.
2. 内容需要延伸至整个屏幕,不能空出,不能用色块遮挡,不得在indicator周围渲染特效。
3.自定义导航栏或tabBar不可设置为固定高度,否则会被感应器部位或 indicator遮挡。
4.尽量不要使用接近屏幕底部的上划手势,可能会与home switcher 冲突,若非要使用,可打开edge protection,此时回到主屏幕需要两个阶段的手势。 注意,app switcher 是iPhone X核心的操作体验,请尽量不要影响它的一致连贯性。
5.在某些情况下,可隐藏 home indicator, 比如播放视频,当用户点击屏幕后才会出现,一会儿会自动隐藏, 要使用此功能,请打开auto-hide behavior. (UIViewController -> override prefersHomeIndicatorAutoHidden, return true)
Apple 建议解决方案:
1.图标使用pdf, pdf可无损缩放(记得在 asset catalog勾选保留矢量数据选项)。免去2x,3x 图片,同时减小了app体积
2.若你使用UIKit标准控件,比如Navigation Controller , UITableView,系统已经为你做了适配,
navigationBar 会自动调整高度适配状态栏(x竖屏的状态栏高度44),cell的contentView 在横屏状态下左右各inset 44 points,竖屏为左右都为0,此功能可在xib或storyboard中关闭,也可用代码关闭。
3.若有自定义控件,使用auto layout 结合 safeArea。safeArea顾名思义定义了一个安全区域,它表示此区域不会被其他内容遮挡,比如navigationBar, statusBar, toolBar, tabBar,等等。
4.若有custom container ViewController,需要在Container的 viewDidAppear中设置子控制器的additionalSafeAreaInsets排除父控制器的overLay View(比如自定义navigationBar)
5.手动布局时,也可通过safeAreaInsets获取 safeArea的insets,注意要在viewDidAppear中或者之后获取,即在view添加到View Hierarchy后才能取到,否则都为0. (这带来一个问题,当viewDidAppear时,View已经显示了,若此时布局会有突然变化的效果,所以我还是乖乖的使用layout margin与auto layout 了,竖屏的话此时底部会有34point空间---貌似有点大,不过看多了就习惯了,横屏为21point)
6.当然了,通过粗暴的方式适配也不是不可以,你可以根据屏幕高度为812,直接判断为iPhone X,然后设置对应的约束。