1.首先是版本适配的问题
[[[[UIDevice currentDevice] systemVersion] substringToIndex:1] intValue] <= 10,此方法不能再作为判断系统版本的方法,因为在iOS10中“substringToIndex: 1”会被一直检测为iOS1
解决办法:OC
使用 [[[UIDevice currentDevice] systemVersion] compare:@"10" options:NSNumericSearch] == NSOrderedDescending 来判断,其中决定你要判断的条件有两个,“compare”:决定要判断的版本,"NSOrderedSame、NSOrderedDescending、NSOrderedAscending"等等决定你是升序还是降序判断
解决办法:Swift
ifNSProcessInfo().isOperatingSystemAtLeastVersion(NSOperatingSystemVersion(majorVersion:10,minorVersion:0,patchVersion:0)){ 里面是条件成立后的代码块 }
2.ATS的问题
1. 我们都知道,在iOS9中使用http的网络是被禁止的,需要我们在info.plist文件中添加NSAppTransportSecurity字典,将NSAllowsArbitraryLoads设置为YES来禁用ATS,如果不知道的,点这里有解决方法
2.从2017年1月1日起,,所有新提交的 app 默认不允许使用NSAllowsArbitraryLoads来绕过ATS的限制,默认情况下你的 app 可以访问加密足够强的(TLS V1.2以上)HTTPS内容
3.可以选择使用NSExceptionDomains设置白名单的方式对特定的域名开放HTTP内容来通过审核
4.在iOS 10 中info.plist文件新加入了NSAllowsArbitraryLoadsInWebContent键,允许任意web页面加载,同时苹果会用 ATS 来保护你的app
5.安全传输不再支持SSLv3, 建议尽快停用SHA1和3DES算法
3.UIStatusBar的问题
在iOS10中,如果还使用以前设置UIStatusBar类型或者控制隐藏还是显示的方法,会报警告,方法过期,如下图:
解决办法:可以使用下面的属性或者方法
@property(nonatomic,readonly)UIStatusBarStyle preferredStatusBarStyle
@property(nonatomic,readonly)BOOL prefersStatusBarHidden
-(BOOL)prefersStatusBarHidden
-(UIStatusBarAnimation)preferredStatusBarUpdateAnimation
4.UIRefreshControl成为了UIScrollView的一个属性
在iOS 10 中, UIRefreshControl可以直接在UICollectionView和UITableView中使用,并且脱离了UITableViewController.现在RefreshControl是UIScrollView的一个属性.
使用方法:
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget: selfaction: @selector(refreshData) forControlEvents: UIControlEventValueChanged];
collectionView.refreshControl = refreshControl;
5.访问隐私数据会Crash
如果在项目中访问了隐私数据,比如:相机,相册,联系人等,在Xcode8中打开编译的话,统统都会crash,这是因为iOS对用户的安全和隐私的增强,在申请很多私有权限的时候都需要添加描述
解决办法:
要想解决这个问题,只需要在info.plist添加NSContactsUsageDescription的key, value自己随意填写就可以,如访问相机:key:NSCameraUsageDescription value:是否同意访问相机;相册:key:NSPhotoLibraryUsageDescription value:是否同意访问相册;定位:key: NSLocationUsageDescription value:是否同意访问位置信息;等等
6.UITextField新增textContentType属性
在iOS 10 中,UITextField新增了textContentType的属性,它是一个枚举,设置它可以指定输入框的类型,以便系统可以分析出用户的语义.是电话类型就建议一些电话,是地址类型就建议一些地址. 具体枚举值,可查看 UIKit/UITextInputTraits.h 文件中第148行.
7.对UICollectionView进行了优化
对UICollectionView进行了优化,并新增加了预加载的UICollectionViewDataSourcePrefetching代理协议及代理方法
-(void)collectionView: (UICollectionView*)collectionView prefetchItemsAtIndexPaths: (NSArray*)indexPaths
-(void)collectionView: (UICollectionView*)collectionView cancelPrefetchingForItemsAtIndexPaths: (NSArray*)indexPaths
注意:这两个代理方法并不能代替之前读取数据的方法,仅仅是辅助加载数据
8.UserNotifications用户通知的改变
以前通知的概念是: 大家想接受的提前做好准备, 然后一下全两分发, 没收到也不管了, 也不关心发送者,现在的用户通知做成了类似于网络请求, 先发一个request得到response的流程, 还封装了error,可以在各个状态的方法中做一些额外的操作, 并且能获得一些字段, 比如发送者之类的, 具体功能在: UserNotifications/UserNotifications.h文件里
9.UIColor的问题增加了sRGB来转换颜色,比RGB支持的颜色更多,性能更好
10.真彩色的类型显示
真彩色的显示会根据光感应器来自动的调节达到特定环境下显示与性能的平衡效果,如果需要这个功能的话,可以在info.plist里配置:
key: UIWhitePointAdaptivityStyle
value有5种:
UIWhitePointAdaptivityStyleStandard // 标准模式
UIWhitePointAdaptivityStyleReading // 阅读模式
UIWhitePointAdaptivityStylePhoto // 图片模式
UIWhitePointAdaptivityStyleVideo // 视频模式
UIWhitePointAdaptivityStyleStandard// 游戏模式
也就是说如果你的项目是阅读类的,就选择 UIWhitePointAdaptivityStyleReading 这个模式,五种模式的显示效果是从上往下递减, 也就是说如果你的项目是图片处理类的,你选择的是阅读模式,给选择太好的效果会影响性能.