###iOS11 适配汇总
iOS11中直接取消了automaticallyAdjustsScrollViewInsets
这个属性,有时候会导致scrollView自动向下偏移。适配方法:一个宏定义:
|
|
坑爹iOS11中tableView默认开启Self-Sizing,导致代理方法tableView:heightForHeaderInSection:
和tableView:heightForFooterInSection:
无效。解决办法就是关闭Self-Sizing:
|
|
iOS11的NavigationItem上面的titleView狗血的会乱成屎。要么宽度不对要么莫名多出一块,解决办法:
|
|
图片放到bundle中的,导航栏用到的图片要写好@2x、@3x,或者直接用Images.xcassets管理
导航栏向上跑了部分距离
|
|
VC中的tableView向下移动部分距离||加载webView的时候会向下移动部分距离
|
|
self.navigationItem.titleView = titleView; 这样操作会导致放在导航栏上面的searchBar消失不见
|
|
iOS11 导航栏按钮位置问题的解决 http://blog.csdn.net/spicyShrimp/article/details/77891717
关于安全区域
http://www.jianshu.com/p/efbc8619d56b
适配iPhoneX不能铺满屏的问题
<1>给Brand Assets添加一张1125*2436大小的图片1>
打开Assets.xcassets文件夹,找到Brand Assets
右键Show in Finder
添加一张1125*2436大小的图片
<2>修改Contents.json文件,添加如下内容
搞事情的导航栏
高度变化
在iOS11导航栏多了一个LargeTitleView,专门显示大字标题用的,整个导航栏的高度达到了96p,这不包括状态栏的高度,也就是说,整个app顶部高度达到了116p,其中statusbar=20,title=44,largetitle=52,不过默认是64p;
当然,iPhoneX的高度会更高点,如果不显示大字标题,顶部的高度也达到了88,statusbar=44,title=44,如果显示大字标题,则高度变成了140,statusbar=44,title=44,largetitle=52,也就是说,iPhoneX的刘海高度为24p
(总结)
|
|
|
|
图层变化
iOS11之前导航栏的title是添加在UINavigationItemView上面,而navigationBarButton则直接添加在navigationBar上面;如果设置了titleView,则titleView也是直接添加在navigationBar上面
在iOS11之后,navigationBar会添加在_UIButtonBarStackView上面,而_UIButtonBarStackView则添加在_UINavigationBarContentView上面;如果没有给titleView赋值,则titleView会直接添加在_UINavigationBarContentView上面,如果赋值给了titleView,则会新生成_UITAMICAdaptorView,把titleView添加在这个类上面,这个类会添加在_UINavigationBarContentView上面
边距变化
在iOS11对导航栏里面的item的边距也做了调整,titleView调整最大的宽带,边距在iPhone6p上是20p,在iPhone6p以下是16p;在iOS11以下,这个边距分别是12p和8p;如果设置了左右navigationBarButton,则在iOS11里,navigationBarButton的边距是20p和16p;在iOS11以下,也是20p和16p;如果同时设置了titleView和navigationBarButton,则在iOS11以下,它们之间的间距是6p,在iOS11则无间距
左右按钮边距为0问题
在iOS11之前,可以设置一个width为负的navigationBarButton,将按钮挤到边缘,变相实现0边距的导航栏按钮,但是,这招在iOS11失效了,原因在于_UIButtonBarStackView,这个iOS9之后出来的,用来相对布局的组件,限制了子view的布局。
搞事情的tabbar的高度改变
iPhoneX的底部增加了虚拟Homeq区,由于安全区域的原因默认tabBar的高度由49变为83,增高了34,不过不管导航栏和tabbar一般系统都会自动适配safeArea。
位置权限
在IOS11,原有的NSLocationAlwaysUsageDeion被降级为NSLocationWhenInUseUsageDeion。因此,在原来项目中使用requestAlwaysAuthorization获取定位权限,而未在plist文件中配置NSLocationAlwaysAndWhenInUseUsageDeion,系统框不会弹出。建议新旧key值都在plist里配置,反正我试下来是没有问题,唯一的区别是使用requestAlwaysAuthorization获取权限 IOS11系统弹框会把几种权限级别全部列出,供用户选择,显然更人性化了。
快去更新你的info.plist
|
|
坑 : 系统方法读取相册是不需要读取权限的 如果这个时候调用写相册权限必须plist加权限 如果给了读取权限 这个时候就不用调用写权限了
分割线
Xcode 9小Tips
1、导入图片若失败,手动在Build Phases —>Copy Binary With Libraies中重新添加一遍即可。
2、Xcode 9 打包时,记得在icon的添加1024*1024的图标。
3、鸡肋的无线调试功能(iPhone的电池…)可在Window –>Devices and Simulators中勾选那两个选项。前提是此设备已run过并处于同一局域网下。
4、在Asset中,可以创建颜色了。右键选择New image set,填充RGBA值或十六进制值即可。使用中直接使用新的colorwithname,参数填入创建时的名字即可。不过记得区分系统版本。
5、command键复原。可在Preferences –> Navigation –>Commadn-click 中选择Jumps to Defintion即可。
6、xcode 9 还允许多开模拟器