一、iOS 10中UIstatusBar方法過(guò)期:
在我們開(kāi)發(fā)中 有可能用到UIStatusBar的一些屬性翎冲,在iOS 10中這些方法已經(jīng)過(guò)期不能使用垂睬,如果你的項(xiàng)目中有用的話就得需要適配。通過(guò)上面的圖片也可以發(fā)現(xiàn)抗悍,如果在iOS 10中你需要使用preferredStatusBar比如以下:
iOS 10- (UIStatusBarStyle)preferredStatusBarStyle {returnUIStatusBarStyleDefault;
}
二驹饺、iOS 10 中UICollectionView的性能優(yōu)化
隨著我們開(kāi)發(fā)者對(duì)UICollectionVIew的信賴,項(xiàng)目當(dāng)中用得到的地方特別多缴渊,但是還是存在一些問(wèn)題赏壹,比如卡頓,加載緩慢等衔沼。所以iOS10對(duì)UICollectionView進(jìn)行了進(jìn)一步的優(yōu)化蝌借,主要體現(xiàn)在了三個(gè)方面:1、順滑的滑動(dòng)體驗(yàn):只要加入少量的代碼就能夠?qū)崿F(xiàn)指蚁。2菩佑、針對(duì)self-sizing的改進(jìn):self-sizing的API在iOS8的時(shí)候被引進(jìn),iOS10中加入更多特性是cell更加容易去適配欣舵;3擎鸠、interactive-reordering重拍:在iOS9中重點(diǎn)介紹過(guò)了,在iOS10的API里面大大增強(qiáng)了這一功能缘圈。就到這里這三點(diǎn)在復(fù)雜就不一一介紹了看連接:WWDC2016 Session筆記 - iOS 10 UICollectionView新特性
三劣光、iOS 10 UIColor 新增方法
以下是官方文檔的說(shuō)明:
Most graphics frameworks throughout the system, including Core Graphics, Core Image, Metal, and AVFoundation, have substantially improved support for extended-range pixel formats and wide-gamut color spaces. By extending this behavior throughout the entire graphics stack, it is easier than ever to support devices with a wide color display. In addition, UIKit standardizes on working in a new extended sRGB color space, making it easy to mix sRGB colors with colors in other, wider color gamuts without a significant performance penalty.
Here are some best practices to adopt as you start working with Wide Color.
In iOS 10, the UIColor class uses the extended sRGB color space and its initializers no longer clamp raw component values to between 0.0 and 1.0. If your app relies on UIKit to clamp component values (whether you’re creating a color or asking a color for its component values), you need to change your app’s behavior when you link against iOS 10.
When performing custom drawing in a UIView on an iPad Pro (9.7 inch), the underlying drawing environment is configured with an extended sRGB color space.
If your app renders custom image objects, use the new UIGraphicsImageRenderer class to control whether the destination bitmap is created using an extended-range or standard-range format.
If you are performing your own image processing on wide-gamut devices using a lower level API, such as Core Graphics or Metal, you should use an extended range color space and a pixel format that supports 16-bit floating-point component values. When clamping of color values is necessary, you should do so explicitly.
Core Graphics, Core Image, and Metal Performance Shaders provide new options for easily converting colors and images between color spaces.
因?yàn)橹拔覀兌际怯肦GB來(lái)設(shè)置顏色,反正用起來(lái)也不是特別多樣化糟把,這次新增的方法應(yīng)該就是一個(gè)彌補(bǔ)吧绢涡。所以在iOS 10 蘋(píng)果官方建議我們使用sRGB,因?yàn)樗阅芨们卜瑁矢S富雄可。如果你自己為UIColor寫(xiě)了一套分類的話也可嘗試替換為sRGB,UIColor類中新增了兩個(gè)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);
四、iOS 10 UITextContentType
// The textContentType property is to provide the keyboard with extra information about the semantic intent of the text document.
@property(nonatomic,copy) UITextContentType textContentType NS_AVAILABLE_IOS(10_0);// default is nil
在iOS 10 UITextField添加了textContentType枚舉数苫,指示文本輸入?yún)^(qū)域所期望的語(yǔ)義意義聪舒。
使用此屬性可以給鍵盤(pán)和系統(tǒng)信息,關(guān)于用戶輸入的內(nèi)容的預(yù)期的語(yǔ)義意義虐急。例如箱残,您可以指定一個(gè)文本字段,用戶填寫(xiě)收到一封電子郵件確認(rèn)uitextcontenttypeemailaddress止吁。當(dāng)您提供有關(guān)您期望用戶在文本輸入?yún)^(qū)域中輸入的內(nèi)容的信息時(shí)被辑,系統(tǒng)可以在某些情況下自動(dòng)選擇適當(dāng)?shù)逆I盤(pán),并提高鍵盤(pán)修正和主動(dòng)與其他文本輸入機(jī)會(huì)的整合敬惦。
五盼理、iOS 10 字體隨著手機(jī)系統(tǒng)字體而改變
當(dāng)我們手機(jī)系統(tǒng)字體改變了之后,那我們App的label也會(huì)跟著一起變化俄删,這需要我們寫(xiě)很多代碼來(lái)進(jìn)一步處理才能實(shí)現(xiàn)宏怔,但是iOS 10 提供了這樣的屬性adjustsFontForContentSizeCategory來(lái)設(shè)置。因?yàn)闆](méi)有真機(jī)抗蠢,具體實(shí)際操作還沒(méi)去實(shí)現(xiàn)举哟,如果理解錯(cuò)誤幫忙指正。
UILabel*myLabel = [UILabelnew];/*
UIFont 的preferredFontForTextStyle: 意思是指定一個(gè)樣式迅矛,并讓字體大小符合用戶設(shè)定的字體大小妨猩。
*/myLabel.font=[UIFontpreferredFontForTextStyle: UIFontTextStyleHeadline];/*
Indicates whether the corresponding element should automatically update its font when the device’s UIContentSizeCategory is changed.
For this property to take effect, the element’s font must be a font vended using +preferredFontForTextStyle: or +preferredFontForTextStyle:compatibleWithTraitCollection: with a valid UIFontTextStyle.
*///是否更新字體的變化myLabel.adjustsFontForContentSizeCategory=YES;
六、iOS 10 UIScrollView新增refreshControl
iOS 10 以后只要是繼承UIScrollView那么就支持刷新功能:
@property(nonatomic,strong, nullable) UIRefreshControl *refreshControl NS_AVAILABLE_IOS(10_0) __TVOS_PROHIBITED;
七秽褒、iOS 10 判斷系統(tǒng)版本正確姿勢(shì)
判斷系統(tǒng)版本是我們經(jīng)常用到的壶硅,尤其是現(xiàn)在大家都有可能需要適配iOS 10,那么問(wèn)題就出現(xiàn)了销斟,如下圖:
我們得到了答案是:
//值為 1
[[[[UIDevice currentDevice] systemVersion] substringToIndex:1] integerValue]
//值為10.000000
[[UIDevice currentDevice] systemVersion].floatValue,//值為10.0
[[UIDevice currentDevice] systemVersion]庐椒;
所以說(shuō)判斷系統(tǒng)方法最好還是用后面的兩種方法,哦~我忘記說(shuō)了[[UIDevice currentDevice] systemVersion].floatValue這個(gè)方法也是不靠譜的蚂踊,好像在8.3版本輸出的值是8.2约谈,記不清楚了反正是不靠譜的,所以建議大家用[[UIDevice currentDevice] systemVersion]這個(gè)方法犁钟!
Swift判斷如下:
if#available(iOS 10.0, *) {// iOS 10.0print("iOS 10.0"); ? ? ? ? ? ? ?}else{ }
參考文章如下:
iOS 日常工作之常用宏定義大全
八棱诱、Xcode 8 插件不能用的問(wèn)題
大家都升級(jí)了Xcode 8,但是對(duì)于插件依賴的開(kāi)發(fā)者們涝动,一邊哭著一邊去網(wǎng)上尋找解決辦法迈勋。那么下面是解決辦法:
讓你的 Xcode8 繼續(xù)使用插件
但是看到文章最后的解釋,我們知道如果用插件的話醋粟,可能安全上會(huì)有問(wèn)題靡菇、并且提交審核會(huì)被拒絕重归,所以建議大家還是不要用了,解決辦法總是有的厦凤,比如在Xcode中添加注釋的代碼塊也是很方便的鼻吮。
九、iOS 10開(kāi)始項(xiàng)目中有的文字顯示不全問(wèn)題
我用Xcode 8 和Xcode 7.3分別測(cè)試了下泳唠,如下圖:
創(chuàng)建一個(gè)Label然后讓它自適應(yīng)大小狈网,字體大小都是17最后輸出的寬度是不一樣的,我們?cè)倏匆幌卤啃龋旅娴臄?shù)據(jù)就知道為什么升級(jí)iOS 10 之后App中有的文字顯示不全了:
Xcode 8打印 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Xcode 7.3打印
1個(gè)文字寬度:17.5 ? ? ? ? ? ? ? ? ? ? ? ? ? 1個(gè)文字寬度:17
2個(gè)文字寬度:35 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2個(gè)文字寬度:34
3個(gè)文字寬度:52 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3個(gè)文字寬度:51
4個(gè)文字寬度:69.5 ? ? ? ? ? ? ? ? ? ? ? ? ? ?4個(gè)文字寬度:68
5個(gè)文字寬度:87 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?5個(gè)文字寬度:85
6個(gè)文字寬度:104 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?6個(gè)文字寬度:102
7個(gè)文字寬度:121.5 ? ? ? ? ? ? ? ? ? ? ? ? ? 7個(gè)文字寬度:119
8個(gè)文字寬度:139 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 8個(gè)文字寬度:136
9個(gè)文字寬度:156 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 9個(gè)文字寬度:153
10個(gè)文字寬度:173.5 ? ? ? ? ? ? ? ? ? ? ? ? 10個(gè)文字寬度:170
英文字母會(huì)不會(huì)也有這種問(wèn)題绽慈,我又通過(guò)測(cè)試灶搜,后來(lái)發(fā)現(xiàn)英文字母沒(méi)有問(wèn)題宗雇,只有漢字有問(wèn)題舒岸。目前只有一個(gè)一個(gè)修改控件解決這個(gè)問(wèn)題灼伤,暫時(shí)沒(méi)有其他好辦法來(lái)解決葛躏。
十叼丑、Xcode 8使用Xib awakeFromNib的警告問(wèn)題
在Xcode 8之前我們使用Xib初始化- (void)awakeFromNib {}都是這么寫(xiě)也沒(méi)什么問(wèn)題扯罐,但是在Xcode 8會(huì)有如下警告:
如果不喜歡這個(gè)警告的話讼积,應(yīng)該明確的加上[super awakeFromNib];我們來(lái)看看官方說(shuō)明:
You must call the super implementation of awakeFromNib to give parent classes the opportunity to perform any additional initialization they require. Although the default implementation of this method does nothing, many UIKit classes provide non-empty implementations. You may call the super implementation at any point during your own awakeFromNib method.
十一肥照、Xcode 8編譯過(guò)慢的問(wèn)題
很多人都反映Xcode 8沒(méi)有之前編譯快了,甚至有些人慢的辣眼睛勤众。但是我的沒(méi)有感覺(jué)很慢舆绎,跟之前差不多,我覺(jué)得跟電腦應(yīng)該有一些聯(lián)系吧们颜,有的開(kāi)發(fā)者幾個(gè)月不重啟電腦吕朵,電腦里運(yùn)行一堆線程,一堆沒(méi)用的垃圾窥突。下面是加速Xcode編譯的方法努溃,感興趣的可以去看一下:
提高Xcode編譯速度
十二、iOS 10 ImagePickerController.cameraViewTransform問(wèn)題
很多人反映自定義相機(jī)出現(xiàn)了問(wèn)題阻问,cameraViewTransform不能用了梧税,其實(shí)網(wǎng)上關(guān)于這個(gè)的資料不是很多,在這里提供參考辦法如下:
通過(guò)監(jiān)聽(tīng)AVCaptureSessionDidStartRunningNotification來(lái)解決
//#import //監(jiān)聽(tīng)[[NSNotificationCenterdefaultCenter] addObserver:selfselector:@selector(cameraNotification:) name:AVCaptureSessionDidStartRunningNotification object:nil];//監(jiān)聽(tīng)方法- (void)cameraNotification:(NSNotification*)notification {dispatch_async(dispatch_get_main_queue(), ^{// 這里實(shí)現(xiàn)imagePickerController.cameraViewTransform= CGAffineTransformMakeTranslation(50,50);
});
}