iOS经典讲解之适配iOS 11那些事-持续更新...

作者:刘新林

转载请标明出处:http://blog.csdn.net/loving_ios/article/details/78573630

1、访问相册权限 NSPhotoLibraryAddUsageDescription

有的文章中提及iOS 11将访问相册权限的NSPhotoLibraryUsageDescription改成了NSPhotoLibraryAddUsageDescription。实际并非如此通过官方API 解释iOS 10新增的访问相册权限是infoplist文件需要添加NSPhotoLibraryUsageDescription,但在iOS 11中系统默认访问相册权限是打开的,不添加NSPhotoLibraryAddUsageDescription也是没问题的,但是如果存储图片时就会crash,所以iOS 11新增的NSPhotoLibraryAddUsageDescription只是在存储照片时添加即可。

2、访问位置权限 NSLocationAlwaysAndWhenInUseUsageDescription

iOS 11以下版本访问位置权限需要添加NSLocationAlwaysUsageDescription(始终允许),NSLocationWhenInUseUsageDescription(使用时),但在iOS 11中就会发现无法访问位置,其实iOS 11新增NSLocationAlwaysAndWhenInUseUsageDescription,而之前的NSLocationAlwaysUsageDescription降为NSLocationWhenInUseUsageDescription,所以适配iOS 11需要添加新key NSLocationAlwaysAndWhenInUseUsageDescription,但之前的也不要删掉,为了适配iOS 11以下版本。

3、Xcode9控制台打印线程警告

Xcode9,iOS 11运行程序控制台打印一堆类似于Main Thread Checker: UI API called on a background thread: -[UIApplication statusBarOrientation]的线程警告,造成的原因是本该在主线程执行的代码放在了子线程中。

解决方法:在scheme里面关掉主线程监测(不提倡)


出现打印问题最好的方法是把出问题的代码放在主线程里边即可 ,例如我发现项目中shareSDK 内部有状态栏设置在子线程 。查看其最新SDK已适配iOS 11,所以升级shareSDK已解决问题,关于其他的代码根据警告同理修改即可。

4、初始化UIBarButtonItem与iOS11以下版本区别

initWithCustomView:初始化BarButtonItem时在iOS 11可以直接用不指定frame的控件初始化,显示是没问题的,而在以下版本需要指定frame例如UILabel可以用sizeToFit,添加titleView 时的控件同样的原理,iOS 11可以不指定大小,直接显示。而在小于iOS 11的系统是不显示的(当然指定大小iOS 11也是没问题的,所以适配版本最好是代码完善,适配各种情况)。这与iOS 11修改NavigationBar的图层有关系。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值