ios10 适配问题总结
2016-09-24 15:55
363 查看
看各个大神整理而成
1、检查版本问题
不可以像下面这样用
这样可以
[[UIDevicecurrentDevice].systemVersionfloatValue]>=10.0
2、隐私设置
你的项目中访问了隐私数据,比如:相机,相册,联系人等,在Xcode8中打开编译的话,统统会crash
3、UIColor问题
官方文档中说:大多数
4、真色彩显示
真彩色的显示会根据光感应器来自动的调节达到特定环境下显示与性能的平衡效果,如果需要这个功能的话,可以在
它有五种取值,分别是:
也就是说如果你的项目是阅读类的,就选择
5、ATS问题
---在iOS9的时候,默认非HTTS的网络是被禁止的,我们可以在
---从2017年1月1日起,,所有新提交的app默认不允许使用
---可以选择使用
---在iOS10中
---安全传输不再支持算法;
6、UIStatusBar
原来setStatusBarStyle不能用了,现在可以通过属性来设置
@property(nonatomic,readonly)UIStatusBarStylepreferredStatusBarStyle
@property(nonatomic,readonly)BOOLprefersStatusBarHidden
-(BOOL)prefersStatusBarHidden
-(UIStatusBarAnimation)preferredStatusBarUpdateAnimation
7、UITextField
在iOS10中,
8、对UICollectionView进行了优化
对UICollectionView进行了优化,并新增加了预加载的UICollectionViewDataSourcePrefetching代理协议及代理方法
-(void)collectionView:(UICollectionView*)collectionViewprefetchItemsAtIndexPaths:(NSArray*)indexPaths
-(void)collectionView:(UICollectionView*)collectionViewcancelPrefetchingForItemsAtIndexPaths:(NSArray*)indexPaths
注意:这两个代理方法并不能代替之前读取数据的方法,仅仅是辅助加载数据在iOS10之前,UICollectionView上面如果有大量cell,当用户活动很快的时候,整个UICollectionView的卡顿会很明显,为什么会造成这样的问题,这里涉及到了iOS系统的重用机制,当cell准备加载进屏幕的时候,整个cell都已经加载完成,等待在屏幕外面了,也就是整整一行cell都已经加载完毕,这就是造成卡顿的主要原因,专业术语叫做:掉帧.要想让用户感觉不到卡顿,我们的app必须帧率达到60帧/秒,也就是说每帧16毫秒要刷新一次.
iOS10之前UICollectionViewCell的生命周期是这样的:
1.用户滑动屏幕,屏幕外有一个cell准备加载进来,把cell从reusr队列拿出来,然后调用
2.继续滑动,就会调用
3.当cell马上进去屏幕的时候,就会调用
4.执行完
iOS10UICollectionViewCell的生命周期是这样的:
1.用户滑动屏幕,屏幕外有一个cell准备加载进来,把cell从reusr队列拿出来,然后调用
2.在
3.用户继续滑动的话,当cell马上就需要显示的时候我们再调用
4.当cell完全离开屏幕以后,会调用
在iOS10之前,cell只能从重用队列里面取出,再走一遍生命周期,并调用
在iOS10中,系统会cell保存一段时间,也就是说当用户把cell滑出屏幕以后,如果又滑动回来,cell不用再走一遍生命周期了,只需要调用
iOS10中,系统是一个一个加载cell的,二以前是一行一行加载的,这样就可以提升很多性能;
9、UIRefreshControl
在iOS10中,UIRefreshControl可以直接在UICollectionView和UITableView中使用,并且脱离了UITableViewController.现在RefreshControl是UIScrollView的一个属性.
使用方法:
10、UserNotifications(用户通知)
iOS10中将通知相关的API都统一了,在此基础上很多用户定义的通知,并且可以捕捉到各个通知状态的回调.以前通知的概念是:大家想接受的提前做好准备,然后一下全两分发,没收到也不管了,也不关心发送者,现在的用户通知做成了类似于网络请求,先发一个
1、检查版本问题
不可以像下面这样用
#defineisiOS10([[[[UIDevicecurrentDevice]systemVersion]substringToIndex:1]intValue]>=10)
这样可以
[[UIDevicecurrentDevice].systemVersionfloatValue]>=10.0
2、隐私设置
你的项目中访问了隐私数据,比如:相机,相册,联系人等,在Xcode8中打开编译的话,统统会crash
<!--相册--> <key>NSPhotoLibraryUsageDescription</key> <string>App需要您的同意,才能访问相册</string> <!--相机--> <key>NSCameraUsageDescription</key> <string>App需要您的同意,才能访问相机</string> <!--麦克风--> <key>NSMicrophoneUsageDescription</key> <string>App需要您的同意,才能访问麦克风</string> <!--位置--> <key>NSLocationUsageDescription</key> <string>App需要您的同意,才能访问位置</string> <!--在使用期间访问位置--> <key>NSLocationWhenInUseUsageDescription</key> <string>App需要您的同意,才能在使用期间访问位置</string> <!--始终访问位置--> <key>NSLocationAlwaysUsageDescription</key> <string>App需要您的同意,才能始终访问位置</string> <!--日历--> <key>NSCalendarsUsageDescription</key> <string>App需要您的同意,才能访问日历</string> <!--提醒事项--> <key>NSRemindersUsageDescription</key> <string>App需要您的同意,才能访问提醒事项</string> <!--运动与健身--> <key>NSMotionUsageDescription</key><string>App需要您的同意,才能访问运动与健身</string> <!--健康更新--> <key>NSHealthUpdateUsageDescription</key> <string>App需要您的同意,才能访问健康更新</string> <!--健康分享--> <key>NSHealthShareUsageDescription</key> <string>App需要您的同意,才能访问健康分享</string> <!--蓝牙--> <key>NSBluetoothPeripheralUsageDescription</key> <string>App需要您的同意,才能访问蓝牙</string> <!--媒体资料库--> <key>NSAppleMusicUsageDescription</key> <string>App需要您的同意,才能访问媒体资料库</string>
3、UIColor问题
官方文档中说:大多数
core开头的图形框架和
AVFoundation都提高了对扩展像素和宽色域色彩空间的支持.通过图形堆栈扩展这种方式比以往支持广色域的显示设备更加容易。现在对UIKit扩展可以在sRGB的色彩空间下工作,性能更好,也可以在更广泛的色域来搭配sRGB颜色.如果你的项目中是通过低级别的api自己实现图形处理的,建议使用sRGB,也就是说在项目中使用了RGB转化颜色的建议转换为使用sRGB,在
UIColor类中新增了两个api:
-(UIColor*)initWithDisplayP3Red:(CGFloat)displayP3Redgreen:(CGFloat)greenblue:(CGFloat)bluealpha:(CGFloat)alphaNS_AVAILABLE_IOS(10_0); +(UIColor*)colorWithDisplayP3Red:(CGFloat)displayP3Redgreen:(CGFloat)greenblue:(CGFloat)bluealpha:(CGFloat)alphaNS_AVAILABLE_IOS(10_0);
4、真色彩显示
真彩色的显示会根据光感应器来自动的调节达到特定环境下显示与性能的平衡效果,如果需要这个功能的话,可以在
info.plist里配置(在SourceCode模式下):
<key>UIWhitePointAdaptivityStyle</key>
它有五种取值,分别是:
<string>UIWhitePointAdaptivityStyleStandard</string>//标准模式 <string>UIWhitePointAdaptivityStyleReading</string>//阅读模式 <string>UIWhitePointAdaptivityStylePhoto</string>//图片模式 <string>UIWhitePointAdaptivityStyleVideo</string>//视频模式 <string>UIWhitePointAdaptivityStyleStandard</string>//游戏模式
也就是说如果你的项目是阅读类的,就选择
UIWhitePointAdaptivityStyleReading这个模式,五种模式的显示效果是从上往下递减,也就是说如果你的项目是图片处理类的,你选择的是阅读模式,给选择太好的效果会影响性能.
5、ATS问题
---在iOS9的时候,默认非HTTS的网络是被禁止的,我们可以在
info.plist文件中添加
NSAppTransportSecurity字典,将
NSAllowsArbitraryLoads设置为
YES来禁用ATS;
---从2017年1月1日起,,所有新提交的app默认不允许使用
NSAllowsArbitraryLoads来绕过ATS的限制,默认情况下你的app可以访问加密足够强的(TLSV1.2以上)HTTPS内容;
---可以选择使用
NSExceptionDomains设置白名单的方式对特定的域名开放HTTP内容来通过审核,比如说你的应用集成了第三方的登录分享SDK,可以通过这种方式来做,下面以新浪SDK作为示范(SourceCode模式下):
<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>sina.cn</key> <dict> <key>NSThirdPartyExceptionMinimumTLSVersion</key> <string>TLSv1.0</string> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> <key>NSIncludesSubdomains</key> <true/> </dict> <key>weibo.cn</key> <dict> <key>NSThirdPartyExceptionMinimumTLSVersion</key> <string>TLSv1.0</string> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> <key>NSIncludesSubdomains</key> <true/> </dict> <key>weibo.com</key> <dict> <key>NSThirdPartyExceptionMinimumTLSVersion</key> <string>TLSv1.0</string> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> <key>NSIncludesSubdomains</key> <true/> </dict> <key>sinaimg.cn</key> <dict> <key>NSThirdPartyExceptionMinimumTLSVersion</key> <string>TLSv1.0</string> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> <key>NSIncludesSubdomains</key> <true/> </dict> <key>sinajs.cn</key> <dict> <key>NSThirdPartyExceptionMinimumTLSVersion</key> <string>TLSv1.0</string> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> <key>NSIncludesSubdomains</key> <true/> </dict> <key>sina.com.cn</key> <dict> <key>NSThirdPartyExceptionMinimumTLSVersion</key> <string>TLSv1.0</string> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> <key>NSIncludesSubdomains</key> <true/> </dict> </dict> </dict>
---在iOS10中
info.plist文件新加入了
NSAllowsArbitraryLoadsInWebContent键,允许任意web页面加载,同时苹果会用ATS来保护你的app;
---安全传输不再支持
SSLv3,建议尽快停用
SHA1和
3DES
6、UIStatusBar
原来setStatusBarStyle不能用了,现在可以通过属性来设置
@property(nonatomic,readonly)UIStatusBarStylepreferredStatusBarStyle
@property(nonatomic,readonly)BOOLprefersStatusBarHidden
-(BOOL)prefersStatusBarHidden
-(UIStatusBarAnimation)preferredStatusBarUpdateAnimation
7、UITextField
在iOS10中,
UITextField新增了
textContentType字段,是
UITextContentType类型,它是一个枚举,作用是可以指定输入框的类型,以便系统可以分析出用户的语义.是电话类型就建议一些电话,是地址类型就建议一些地址.可以在
#import<UIKit/UITextInputTraits.h>文件中,查看
textContentType字段,有以下可以选择的类型:
UITextContentTypeName UITextContentTypeNamePrefix UITextContentTypeGivenName UITextContentTypeMiddleName UITextContentTypeFamilyName UITextContentTypeNameSuffix UITextContentTypeNickname UITextContentTypeJobTitle UITextContentTypeOrganizationName UITextContentTypeLocation UITextContentTypeFullStreetAddress UITextContentTypeStreetAddressLine1 UITextContentTypeStreetAddressLine2 UITextContentTypeAddressCity UITextContentTypeAddressState UITextContentTypeAddressCityAndState UITextContentTypeSublocality UITextContentTypeCountryName UITextContentTypePostalCode UITextContentTypeTelephoneNumber UITextContentTypeEmailAddress UITextContentTypeURL UITextContentTypeCreditCardNumber
8、对UICollectionView进行了优化
对UICollectionView进行了优化,并新增加了预加载的UICollectionViewDataSourcePrefetching代理协议及代理方法
-(void)collectionView:(UICollectionView*)collectionViewprefetchItemsAtIndexPaths:(NSArray*)indexPaths
-(void)collectionView:(UICollectionView*)collectionViewcancelPrefetchingForItemsAtIndexPaths:(NSArray*)indexPaths
注意:这两个代理方法并不能代替之前读取数据的方法,仅仅是辅助加载数据在iOS10之前,UICollectionView上面如果有大量cell,当用户活动很快的时候,整个UICollectionView的卡顿会很明显,为什么会造成这样的问题,这里涉及到了iOS系统的重用机制,当cell准备加载进屏幕的时候,整个cell都已经加载完成,等待在屏幕外面了,也就是整整一行cell都已经加载完毕,这就是造成卡顿的主要原因,专业术语叫做:掉帧.要想让用户感觉不到卡顿,我们的app必须帧率达到60帧/秒,也就是说每帧16毫秒要刷新一次.
iOS10之前UICollectionViewCell的生命周期是这样的:
1.用户滑动屏幕,屏幕外有一个cell准备加载进来,把cell从reusr队列拿出来,然后调用
prepareForReuse方法,在这个方法里面,可以重置cell的状态,加载新的数据;
2.继续滑动,就会调用
cellForItemAtIndexPath方法,在这个方法里面给cell赋值模型,然后返回给系统;
3.当cell马上进去屏幕的时候,就会调用
willDisplayCell方法,在这个方法里面我们还可以修改cell,为进入屏幕做最后的准备工作;
4.执行完
willDisplayCell方法后,cell就进去屏幕了.当cell完全离开屏幕以后,会调用
didEndDisplayingCell方法.
iOS10UICollectionViewCell的生命周期是这样的:
1.用户滑动屏幕,屏幕外有一个cell准备加载进来,把cell从reusr队列拿出来,然后调用
prepareForReuse方法,在这里当cell还没有进去屏幕的时候,就已经提前调用这个方法了,对比之前的区别是之前是cell的上边缘马上进去屏幕的时候就会调用该方法,而iOS10提前到cell还在屏幕外面的时候就调用;
2.在
cellForItemAtIndexPath中创建cell,填充数据,刷新状态等操作,相比于之前也提前了;
3.用户继续滑动的话,当cell马上就需要显示的时候我们再调用
willDisplayCell方法,原则就是:何时需要显示,何时再去调用
willDisplayCell方法;
4.当cell完全离开屏幕以后,会调用
didEndDisplayingCell方法,跟之前一样,cell会进入重用队列.
在iOS10之前,cell只能从重用队列里面取出,再走一遍生命周期,并调用
cellForItemAtIndexPath创建或者生成一个cell.
在iOS10中,系统会cell保存一段时间,也就是说当用户把cell滑出屏幕以后,如果又滑动回来,cell不用再走一遍生命周期了,只需要调用
willDisplayCell方法就可以重新出现在屏幕中了.
iOS10中,系统是一个一个加载cell的,二以前是一行一行加载的,这样就可以提升很多性能;
9、UIRefreshControl
在iOS10中,UIRefreshControl可以直接在UICollectionView和UITableView中使用,并且脱离了UITableViewController.现在RefreshControl是UIScrollView的一个属性.
使用方法:
UIRefreshControl*refreshControl=[[UIRefreshControlalloc]init]; [refreshControladdTarget:selfaction:@selector(loadData)forControlEvents:UIControlEventValueChanged]; collectionView.refreshControl=refreshControl;
10、UserNotifications(用户通知)
iOS10中将通知相关的API都统一了,在此基础上很多用户定义的通知,并且可以捕捉到各个通知状态的回调.以前通知的概念是:大家想接受的提前做好准备,然后一下全两分发,没收到也不管了,也不关心发送者,现在的用户通知做成了类似于网络请求,先发一个
request得到
response的流程,还封装了
error,可以在各个状态的方法中做一些额外的操作,并且能获得一些字段,比如发送者之类的.这个功能的头文件是:
#import<UserNotifications/UserNotifications.h>
相关文章推荐
- ios10适配相关问题总结
- 总结适配IOS10开发需要注意的问题
- 总结适配IOS10需要注意的问题
- iOS10 适配-Xcode8问题总结及解决方案
- Swift3.0已出坑-适配iOS10,项目迁移Swift3.0问题总结。
- iOS10适配问题点总结
- Swift3.0已出坑-适配iOS10,项目迁移Swift3.0问题总结。
- 总结适配IOS10需要注意的问题
- Swift3.0已出坑-适配iOS10,项目迁移Swift3.0问题总结。
- iOS10适配相关问题总结
- 总结适配IOS10需要注意的问题
- iOS10适配 设置图片圆角的问题
- iOS10 相关适配问题
- iOS10适配问题
- iOS10 的适配小问题
- 360页面适配问题总结
- iOS10开发适配系列 之 权限崩溃问题
- iOS10 适配问题
- iOS开发之适配IPV6更新网络处理为AFNetworking3.x, 集成以及遇到的一些问题总结。
- [iOS 10 适配问题] 整合iOS10系统的适配相关内容