*摘抄于網(wǎng)絡各路大神 — — *
一贞让、iOS10 適配問題
1. 系統(tǒng)判斷版本方法
//值為 1
[[[[UIDevice currentDevice] systemVersion] substringToIndex:1] integerValue]
//值為10.000000
[[UIDevice currentDevice] systemVersion].floatValue,
//值為10.0
[[UIDevice currentDevice] systemVersion]
2. UserNotifications(用戶通知)變化
iOS 10 開始的通知
1.所有相關(guān)通知被統(tǒng)一到了UserNotifications.framework
框架中。
2.增加了撤銷拳球、更新、中途還可以修改通知的內(nèi)容葵袭。
3.通知不在是簡單的文本了沉颂,可以加入視頻、圖片剿骨,自定義通知的展示等等。
4.iOS 10相對之前的通知來說更加好用易于管理埠褪,并且進行了大規(guī)模優(yōu)化浓利,對于開發(fā)者來說是一件好事。
5.iOS 10開始對于權(quán)限問題進行了優(yōu)化钞速,申請權(quán)限就比較簡單了(本地與遠程通知集成在一個方法中)贷掖。
3. ATS的問題
iOS 9中默認HTTP的網(wǎng)絡是不推薦使用的,當然我們也可以把NSAllowsArbitraryLoads
設置為YES禁用ATS渴语。不過iOS 10從2017年1月1日起蘋果不允許我們通過這個方法跳過ATS苹威,也就是說強制我們用HTTPS,如果不這樣的話提交App可能會被拒絕驾凶。但是我們可以通過NSExceptionDomains
來針對特定的域名開放HTTP可以容易通過審核牙甫。
4. iOS 10 隱私權(quán)限設置
iOS 10 開始對隱私權(quán)限更加嚴格,如果你不設置就會直接崩潰调违,現(xiàn)在很多遇到崩潰問題了窟哺,一般解決辦法都是在info.plist
文件添加對應的Key-Value
就可以了。
以上Value值技肩,圈出的紅線部分的文字是展示給用戶看的且轨,需要自己添加規(guī)范的提示說明,不能為空虚婿。
5. UIStatusBar的問題
在iOS10中,如果還使用以前設置UIStatusBar
類型或者控制隱藏還是顯示的方法,會報警告,方法過期,要想修改UIStatusBar的樣式或者狀態(tài)使用下面所示的屬性或方法:
@property(nonatomic, readonly) UIStatusBarStyle preferredStatusBarStyle
@property(nonatomic, readonly) BOOL prefersStatusBarHidden
- (UIStatusBarStyle)preferredStatusBarStyle
- (BOOL)prefersStatusBarHidden
- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation
6. iOS 10項目中有的文字顯示不全問題
英文字母會不會也有這種問題殖告,我又通過測試,后來發(fā)現(xiàn)英文字母沒有問題雳锋,只有漢字有問題。目前只有一個一個修改控件解決這個問題羡洁,暫時沒有其他好辦法來解決玷过。
- iOS 10
ImagePickerController.cameraViewTransform
問題
很多人反映自定義相機出現(xiàn)了問題,cameraViewTransform
不能用了,其實網(wǎng)上關(guān)于這個的資料不是很多辛蚊,在這里提供參考辦法如下:
//#import <AVFoundation/AVFoundation.h>
//監(jiān)聽
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(cameraNotification:) name:AVCaptureSessionDidStartRunningNotification object:nil];
//監(jiān)聽方法
- (void)cameraNotification:(NSNotification *)notification {
dispatch_async(dispatch_get_main_queue(), ^{
// 這里實現(xiàn)
imagePickerController.cameraViewTransform = CGAffineTransformMakeTranslation(50, 50);
});
}
看來UIImagePickerController
視乎不在適用于iOS 10了粤蝎。所以說可以選擇AVFoundation
來解決這個問題。
8. 代碼及Api注意
使用Xcode8之后袋马,有些代碼可能就編譯不過去了初澎,具體我就說說我碰到的問題。
1.UIWebView
的代理方法:
**注意要刪除NSError前面的 nullable虑凛,否則報錯碑宴。
- (void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error {
[self hideHud];
}
二、Xcode 8 變動
1. Xcode 8 運行一堆沒用的logs解決辦法
解決辦法是設置 OS_ACTIVITY_MODE : disable
如下圖:
2. Xcode 8代碼注釋不能用的解決辦法
這個是因為蘋果解決xcode ghost桑谍,把插件屏蔽了延柠。
解決辦法(fix method):
打開終端,命令運行:sudo /usr/libexec/xpccachectl
重啟電腦后生效
3. Xcode 8使用Xib awakeFromNib的警告問題
應該明確的加上[super awakeFromNib];
4. 屏蔽雜亂無章的bug
更新Xcode8之后锣披,新建立工程贞间,都會打印一堆莫名其妙看不懂的Log.
屏蔽的方法如下:
Xcode8里邊 Edit Scheme-> Run -> Arguments
, 在Environment Variables里邊添加
OS_ACTIVITY_MODE = Disable
5.自動管理證書
用Xcode8打開工程后,比較明顯的就是下圖了雹仿,這個是蘋果的新特性增热,可以幫助我們自動管理證書,在Xcode的偏好設置中胧辽,添加蘋果賬號峻仇,即可。票顾。
6.Xib文件的注意事項
使用Xcode8打開xib文件后础浮,會出現(xiàn)下圖的提示。
大家選擇Choose Device
即可奠骄。
之后大家會發(fā)現(xiàn)布局啊豆同,frame亂了,只需要更新一下frame即可含鳞。如下圖
注意:如果按上面的步驟操作后影锈,在用Xcode7打開Xib會報一下錯誤
解決辦法:需要刪除Xib里面<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
這句話,以及把< document >中的toolsVersion和< plugIn >中的version改成你正常的xib文件中的值
蝉绷,不過不建議這么做鸭廷,在Xcode8出來后,希望大家都快速上手熔吗,全員更新辆床。
三、一些改動
1. UIColor的問題
官方文檔中說:大多數(shù)core開頭的圖形框架和AVFoundation都提高了對擴展像素和寬色域色彩空間的支持.通過圖形堆棧擴展這種方式比以往支持 廣色域的顯示設備更加容易∥荩現(xiàn)在對UIKit擴展可以在sRGB的色彩空間下工作讼载,性能更好,也可以在更廣泛的色域來搭配sRGB顏色.如果你的項目中是 通過低級別的api自己實現(xiàn)圖形處理的,建議使用sRGB,也就是說在項目中使用了RGB轉(zhuǎn)化顏色的建議轉(zhuǎn)換為使用sRGB,在UIColor類中新增了 兩個api:
- (UIColor *)initWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha NS_AVAILABLE_IOS(10_0);
+ (UIColor *)colorWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha NS_AVAILABLE_IOS(10_0);
2. 真彩色的顯示
真彩色的顯示會根據(jù)光感應器來自動的調(diào)節(jié)達到特定環(huán)境下顯示與性能的平衡效果,如果需要這個功能的話,可以在info.plist
里配置(在Source Code模式下): UIWhitePointAdaptivityStyle
3. UITextField 類型判斷
在iOS 10 中,UITextField
新增了textContentType
字段,是UITextContentType
類型,它是一個枚舉,作用是可以指定輸入框 的類型,以便系統(tǒng)可以分析出用戶的語義.是電話類型就建議一些電話,是地址類型就建議一些地址.可以在#import
文件中,查看 textContentType
字段
4. UICollectionViewCell的的優(yōu)化
在iOS 10 之前,cell
只能從重用隊列里面取出,再走一遍生命周期,并調(diào)用cellForItemAtIndexPath
創(chuàng)建或者生成一個cell
.
在iOS 10 中,系統(tǒng)會cell
保存一段時間,也就是說當用戶把cell
滑出屏幕以后,如果又滑動回來,cell
不用再走一遍生命周期了,只需要調(diào)用willDisplayCell
方法就可以重新出現(xiàn)在屏幕中了.
iOS 10 中,系統(tǒng)是一個一個加載cell的,而以前是一行一行加載的,這樣就可以提升很多性能; 并且新增加的Pre-Fetching
預加載轿秧,對UITableViewCell
同樣適用。
5. UIRefreshControl的使用
在iOS 10 中, UIRefreshControl
可以直接在UICollectionView
和UITableView
中使用,并且脫離了UITableViewController
現(xiàn)在RefreshControl
是UIScrollView
的一個屬性.
6. iOS 10 字體隨著手機系統(tǒng)字體而改變
當我們手機系統(tǒng)字體改變了之后咨堤,那我們App的label也會跟著一起變化菇篡,這需要我們寫很多代碼來進一步處理才能實現(xiàn),但是iOS 10 提供了這樣的屬性adjustsFontForContentSizeCategory
來設置一喘。