博客> 谈谈iOS10适配
谈谈iOS10适配
2019-07-22 10:30 评论:0 阅读:1049 飞哥
ios NSArray Dictionary

前几天,苹果高调发布了iOS系统,并于9月14日正式上线。那么,这让作为iOS工程师们广大同胞们又要开始忙碌了。那么该如何适配了?

首先,看看iOS10 都有哪些重磅更新吧。

1、Notification 从Notification被引进后,就不断的优化,但这次的更新真是巨大的。对比一下:

iOS 9之前的通知: 1、在调用方法是比较多,比如获取token,本地通知和远程通知等。 2、开发的时候用运行时和非运行时捕获的通知路径不一致。 3、应用在前台时,无法接受远程通知等。 4、通知内容单一,只能是文本信息,自定义也不方便,而且当通知出错时,已推送的通知不能更改、撤销等。

iOS 10 的通知 1、通知相关的API都被归到UserNotification.frameworks 框架中。 2、新增 撤销、更新、等接口,可以在推送出去以后在修改通知内容。 3、通知内容也多样化,包括但不限于简单的文本信息,并且可以加入视频、图片,等媒体信息以及自定义通知等。 4、对权限等管理优化。

2、ATS 苹果一直对于安全问题比较强调。但是即便是iOS9也只是默认使用https,但是当我们吧NSAllowsArbitraryLoads设置为YES时即可禁用ATS。但是iOS从2017年1月1日起,不再允许通过设置这个方法来跳过ATS,不然提交的App将会被拒(重要)。另外,可以通过NSExceptionDomains来对特定的域名开放http。比较同意通过审核。

3、权限设置 相比于之前版本,iOS10的隐私权限更加严格,如果不设置就会直接崩溃,幸运的是,在控制台会直接提示,直接到info.plist里面设置即可。

<key>NSCameraUsageDescription</key>    
<string>cameraDesciption</string>

<key>NSContactsUsageDescription</key>    
<string>contactsDesciption</string>

<key>NSMicrophoneUsageDescription</key>    
<string>microphoneDesciption</string>

4、iOS 10 UIStatusBar 方法过期: iOS10中需要这样设置:

  • (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleDefault; }

5、UICOllectionView 性能优化 随着UICollectionView使用越来越广泛,其中的问题也日益突出,比如卡段,加载缓慢等。这些在iOS10中都得到了优化。其中: 1、UICollectionViewCell 引进了预加载机制 2、UICollectionView 和UITableview PreFetchDataSource 都新增预加载API 3、针对self-sizing cells的改进 4、inter爱餐厅recording

iOS 10 之前:UIcollection 上面,如果cell数量较多,滑动很快的时候,UICollectionView就会明显的卡顿,原因是,在iOS 9以前,在cell滑进屏幕之前,就先加载完成了,在滑进时就造成了延时。 1、用户滑动屏幕,屏幕外就有一行cell已经逐步加载了,如果附泳池里面有cell的话,从复用池里取出 2、继续滑动,就会调用cellForItemAtIndexPath方法,在这个方法里面给cell赋值模型,然后返回给系统; 3、当cell马上进去屏幕的时候,就会调用willDisplayCell方法,在这个方法里面我们还可以修改cell,为进入屏幕做最后的准备工作; 4、执行完willDisplayCell方法后,cell就进去屏幕了.当cell完全离开屏幕以后,会调用didEndDisplayingCell方法.

iOS 10: 1、用户滑动屏幕,屏幕外有一个cell准备加载进来,把cell从reusr队列拿出来,然后调用prepareForReuse方法,在这里当cell还没有进去屏幕的时候,就已经提前调用这个方法了,对比之前的区别是之前是cell的上边缘马上进去屏幕的时候就会调用该方法,而iOS 10 提前到cell还在屏幕外面的时候就调用; 2、 在cellForItemAtIndexPath中创建cell,填充数据,刷新状态等操作,相比于之前也提前了; 3、用户继续滑动的话,当cell马上就需要显示的时候我们再调用willDisplayCell方法,原则就是:何时需要显示,何时再去调用willDisplayCell方法; 4、当cell完全离开屏幕以后,会调用didEndDisplayingCell方法,跟之前一样,cell会进入重用队列. 在iOS 10 之前,cell只能从重用队列里面取出,再走一遍生命周期,并调用cellForItemAtIndexPath创建或者生成一个cell. 5、在iOS 10 中,系统会cell保存一段时间,也就是说当用户把cell滑出屏幕以后,如果又滑动回来,cell不用再走一遍生命周期了,只需要调用willDisplayCell方法就可以重新出现在屏幕中了. 6、iOS 10 中,系统是一个一个加载cell的,二以前是一行一行加载的,这样就可以提升很多性能;

  7、iOS 10 新增加的Pre-Fetching预加载

这个是为了降低UICollectionViewCell在加载的时候所花费的时间,在 iOS 10 中,除了数据源协议和代理协议外,新增加了一个UICollectionViewDataSourcePrefetching协议,这个协议里面定义了两个方法:   - (void)collectionView:(UICollectionView )collectionView prefetchItemsAtIndexPaths:(NSArray )indexPaths NS_AVAILABLE_IOS(10_0);

  - (void)collectionView:(UICollectionView )collectionView cancelPrefetchingForItemsAtIndexPaths:(NSArray )indexPaths NS_AVAILABLE_IOS(10_0);    在ColletionView prefetchItemsAt indexPaths这个方法是异步预加载数据的,当中的indexPaths数组是有序的,就是item接收数据的顺序;    CollectionView cancelPrefetcingForItemsAt indexPaths这个方法是可选的,可以用来处理在滑动中取消或者降低提前加载数据的优先级.(注意:这个协议并不能代替之前读取数据的方法,仅仅是辅助加载数据.)    Pre-Fetching预加载对UITableViewCell同样适用.

6、iOS 10 UIColor 新增方法 因为之前系统颜色太少,为了瞒住需要大家都采用RGB来设置颜色,反正用起来也不是特别多样化,这次新增的方法应该就是一个弥补吧。所以在iOS 10 苹果官方建议我们使用sRGB,因为它性能更好,色彩更丰富。如果你自己为UIColor写了一套分类的话也可尝试替换为sRGB,UIColor类中新增了两个Api如下:

  • (UIColor *)colorWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha NS_AVAILABLE_IOS(10_0);

  • (UIColor *)initWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha NS_AVAILABLE_IOS(10_0);

7、iOS 10 UITextContentType 在iOS 10 UITextField添加了textContentType枚举,指示文本输入区域所期望的语义意义。使用此属性可以给键盘和系统信息,关于用户输入的内容的预期的语义意义。例如,您可以指定一个文本字段,用户填写收到一封电子邮件确认uitextcontenttypeemailaddress。当您提供有关您期望用户在文本输入区域中输入的内容的信息时,系统可以在某些情况下自动选择适当的键盘,并提高键盘修正和主动与其他文本输入机会的整合。

8、iOS 10 字体随着手机系统字体而改变 当我们手机系统字体改变了之后,那我们App的label也会跟着一起变化,这需要我们写很多代码来进一步处理才能实现,但是iOS 10 提供了这样的属性adjustsFontForContentSizeCategory来设置。因为没有真机,具体实际操作还没去实现,如果理解错误帮忙指正。

UIFont 的preferredFontForTextStyle: 意思是指定一个样式,并让字体大小符合用户设定的字体大小。 [UIFont preferredFontForTextStyle: UIFontTextStyleHeadline]; /* Label.adjustsFontForContentSizeCategory = YES;

9、iOS 10 UIScrollView新增refreshControl UIScreen.h Added UIscrenn.focusedItem Added UIscreen.mainScreen Added UIscreen.screens

UIscrollView.h Added UIScrollView.refreshControll

UISelectionFeedbackGenerato.h Added UISelectionFeedbackGenerato add -[UISelectionFeedbackGenerator selectChanged]

iOS 10 以后只要是继承UIScrollView那么就支持刷新功能:

@property (nonatomic, strong, nullable) UIRefreshControl *refreshControl NS_AVAILABLE_IOS(10_0) __TVOS_PROHIBITED;

收藏
1
sina weixin mail 回到顶部