屏幕尺寸变化
- 高度增加了145pt,变成812pt.
- 屏幕圆角显示,注意至少留10pt边距。
- 状态栏高度由20pt变成44pt,留意这个距离就能避开“刘海”的尴尬,相应的导航栏以上变化64->88。
- 底部工具栏需要为home indicator留出34pt边距。
- 物理分辨率为1125px * 2436px.
安全区
image.png image.png首先关于适配iPhoneX,适配安全区讲,因为iPhoneX的刘海和底部Home Indicator上滑指示条的存在,所以弄出来一个安全区的概念。这个区域,就是保证我们的内容的在任何时候,尤其是横屏状态下,内容不被遮盖!而且这个安全区是可以自己设置更改的,不过修改了安全区到底是否影响审核,还是需要看苹果时候的审核规则,目前来看,还是老老实实的把内容写到安全区域内为上策~
参考很多文章,可以这样理解,安全区域是系统提供给开发者如何布局的参考区域,参考这个区域适配会非常简单。当然,你也可以无视这个方法,手动自己适配,这个当然是绝对不推荐的了。
如何去适配
1、APP启动图适配
2、APP内部样式适配
3、导航栏和tabbar适配
-
APP启动图适配
相信有一部分道友的APP在iPhone X上运行时并没有像想象中那样占满整个屏幕, 而是保持着原有的高度 在屏幕中心位置, 针对这个问题 目前经过实验得出可以通过以下方式使APP按照全屏模式运行:
1.通过LaunchScreen.storyboard方式启动
2.如果使用的是Assets中的LaunchImage, 在增加了iPhone X尺寸的图片配置后.
LaunchScreen.storyboard方式不用多说, 这里说一下如何在LaunchImage中增加iPhone X尺寸的图片配置.
准备一张尺寸:1125 * 2436的启动图片, 移动到LaunchImage的Finder目录中, 并在LaunchImage中的Contents.json文件中增加 (注意Json格式)
{
"extent" : "full-screen",
"idiom" : "iphone",
"subtype" : "2436h",
"filename" : "图片名.png",
"minimum-system-version" : "11.0",
"orientation" : "portrait",
"scale" : "3x"
}
-
APP内部样式适配
滚动条高度跳动、上下拉刷新问题
self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;
列表/页面偏移
//设置工程中的UITableView、UICollectionView、UIScrollView的contentInsetAdjustmentBehavior属性,如下
if (@available(iOS 11.0, *)){
_tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}
//由于UIView及其子类都遵循UIAppearance协议,我们可以进行全局配置:
// AppDelegate 进行全局设置
if (@available(iOS 11.0, *)){
[[UIScrollView appearance] setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];
}
-
导航栏和tabbar适配
导航栏-状态栏适配参考图.pngiOS11前导航栏的高度是64,其中statusBar的高度为20,而iPhoneX的statusBar高度变为了44,如果是自定义的NaviBar,这部分需要做相应的适配。
iPhoneX的底部增加了虚拟Home区,由于安全区域的原因默认tabBar的高度由49变为83,增高了34,所以自定义的底部TabBar也需要需改其适配方案。
iPhone X 变化最大的是头部 & 底部
非iPhone X :
StatusBar 高20pt,NavigationBar 高44pt,底部TabBar高49pt
iPhone X:
StatusBar 高44pt,NavigationBar 高44pt,底部TabBar高83pt
所以,之前项目里写死的 ±49 ±64 都要出问题,如果你之前抽离出来使用的是宏,那问题不大,如果不是,开始搬砖吧少年。
项目适配主要关注点
1.项目中所有涉及到布局的地方使用宏来适配(避免使用64、88、44、34、、等一些具体数字来布局),便于全局适配和管理
2.控制器中使用自定义导航栏,导航栏背景View高度=状态栏+导航栏高度,自定义导航栏中子控件布局一般在状态栏下方,即应在系统导航栏所在的区域内布局
3.控制器中自定义底部工具栏,工具栏背景View高度=工具栏高度+底部虚拟home区高度,自定义工具栏子控件布局一般在底部虚拟home区上,即系统工具栏子控件所在位置
4.横屏状态下,一般可触发按钮在安全区域内
5.关注app中上拉下拉弹框和页面UI布局问题
参考文档
http://fighting300.com/2017/09/14/iOS11-UI-adjust/
https://www.jianshu.com/p/94d3fdc0f20d
https://www.jianshu.com/p/52135c5f144e
网友评论