iPhone X的简单适配
2017-11-06 17:31
218 查看
App 页面适配
适配前
解决办法
LaunchImage 中添加一个和 iPhone X 相关的启动图片 * 图片尺寸:1125 * 2436 * Contents.json 中代码如下{ "extent" : "full-screen", "idiom" : "iphone", "subtype" : "2436h", "filename" : "1125_2436.png", "minimum-system-version" : "11.0", "orientation" : "portrait", "scale" : "3x" }123456789
适配后
页面布局细节
Safe Area
动机
iPhone X 取消了 Home键,实现了高屏占比,所以默认 View 的区域是全屏幕屏幕四周有圆角、顶部有“刘海”、底部有手势区域顶部导航栏Safe Area 如下图 (红色区域)
Safe Area 大小
竖屏▿ UIEdgeInsets - top : 44.0 - left : 0.0 - bottom : 34.0 - right : 0.012345横屏
- top : 0.0 - left : 44.0 - bottom : 21.0 - right : 44.01234
自动布局时的注意点
iOS11 以前,我们布局时,视图的 top 和 bottom 一般参照的是Top Layout Guide和
Bottom Layout GuideiOS11 以后,那两个参照已经
deprecated(过时)了,而被
Safe Area取代。
Safe Area要求最低支持 iOS9.0
Xcode9 适配
WKWebViewJavascriptBridge
// 原贴地址:https://github.com/marcuswestin/WebViewJavascriptBridge/issues/278 - (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error { // …… // Xcode 升级到9后 WKWebViewJavascriptBridge.m 中有个 bug // 需要在"decisionHandler(WKNavigationActionPolicyCancel);"后加上 return,否则崩溃。 // 不升级 Xcode 的话,没问题。 decisionHandler(WKNavigationActionPolicyCancel); return; }1234567891011
部分页面适配 iPhone X
底部有按钮的页面
适配前控制器生命周期之viewSafeAreaInsetsDidChange
viewDidLoad
viewWillAppear
viewSafeAreaInsetsDidChange(NEW)
viewWillLayoutSubviews
viewDidAppear
可以在 viewSafeAreaInsetsDidChange 后,设置 Safe Area
if #available(iOS 11.0, *) { self.additionalSafeAreaInsets = UIEdgeInsetsMake(10, 0, 0, 34) }2、程序进到程序的首页。如果采用了MJRefresh的刷新机制,则会显示如下图的效果,导致刷新头部显示。不过按照实验能看到,如果不显示下拉箭头,则【刘海】可以正好盖住(如图一),不过想让statusBar变颜色,可以采用view上移-88 则会正常显示。(如图二)或者界面不上移动,将刷新头部背景色变成和项目顶部背景色一样也可以,即设置:.mj_header.backgroundColor如果都不想改,可以坐等MJRefresh的作者更新,目前这个问题,已经提交给作者。
![](http://upload-images.jianshu.io/upload_images/1447452-e5019f5b1436747b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/1447452-3d6ebcce9197bb05.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/1447452-409927d6d85746d5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/1447452-3c58d637f7f861a8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/1447452-59258368ee292aa7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/1447452-fb92a8694e8d5363.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/1447452-705b8081e3abcbd6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](https://static.oschina.net/uploads/space/2017/0920/161921_cAwB_2523541.png)
![](https://static.oschina.net/uploads/space/2017/0920/162528_goj6_2523541.png)
![](https://static.oschina.net/uploads/space/2017/0922/095643_Fjl1_2523541.png)
tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;然后如果是iPhone X 的情况下 设置scrollView.contentInset = UIEdgeInsetsMake(-44, 0, 0, 0);(我项目因为要取消状态栏影响 所以约束设置的为-20 所以这里的安全区域偏移 更改为-24 即可 根据自己实际情况设置)然后设置self.tableView.clipsToBounds =NO;(不设置的话 如果设置的是透明导航 会出现被遮挡的情况)以上代码即可解决透明导航 在iPhone X 出现白色状态栏遮挡的问题 6、navigationbar上设置searchbar为titleView,发现导航变高了。。。然后返回到上个界面,UI布局就变了解决方法:将searchbar 放入一个view 里边使用view 来限制searchbar 的大小 然后再把view 给navigationbar的titleView7、ios11默认是开启Self-Sizing,如果目前项目中没有使用estimateRowHeight属性,tableView是使用estimateRowHeight属性的,这样就会造成contentSize和contentOffset值的变化,如果是有动画是观察这两个属性的变化进行的,就会造成动画的异常,因为在估算行高机制下,contentSize的值是一点点地变化更新的,所有cell显示完后才是最终的contentSize值。因为不会缓存正确的行高,tableView reloadData的时候,会重新计算contentSize,就有可能会引起contentOffset的变化。iOS11下不想使用Self-Sizing的话,可以通过以下方式关闭: tableView.estimatedRowHeight = 0 tableView.estimatedSectionFooterHeight = 0 tableView.estimatedSectionHeaderHeight = 0 iOS11下,如果没有设置estimateRowHeight的值,也没有设置rowHeight的值,那contentSize计算初始值是 44 * cell的个数,如下图:8、对于大量页面需要设置 contentInsetAdjustmentBehavior属性 仅需在appdelegate 里边设置就可 全局适配
![](https://static.oschina.net/uploads/space/2017/0925/150751_WZDi_2523541.jpg)
相关文章推荐
- iOS11以及iPhone X的简单适配
- 简单的判断iPhone适配的问题
- 简单适配3.5寸,4寸iPhone屏幕的方法
- 网页适配 iPhoneX,就是这么简单
- H5页面适配 iPhoneX,就是这么简单
- H5网页适配 iPhoneX,就是这么简单
- iOS iphoneX 的简单适配
- 浅谈iphone X的简单适配问题(推荐)
- iPhone X以及iOS11的一些问题以及简单的适配
- iPhoneX快速适配,简单到你想哭。
- [超级懒人最简单法]iPhone 6 plus 适配切图方法分享(转载文章)
- 获取移动端设备的屏幕信息(简单适配iphoneX)
- 网页适配 iPhoneX,就是这么简单
- H5页面适配 iPhoneX,就是这么简单
- iphone中 CoreData 框架的简单解释
- iOS:界面适配(三)--iPhone不同机型适配 6/6plus 前
- 简单流程很有用 iPhone程序开发新手教程
- iPhone屏幕尺寸、分辨率及适配
- iphone ios 如何开发升级适配 iphone5 4inch