原文連接php
自從Notification
被引入以後,蘋果就不斷的更新優化,但這些更新優化只是小打小鬧,直至如今iOS 10開始真正的進行大改重構,這讓開發者也體會到UserNotifications
的易用,功能也變得很是強大。ios
iOS 9 之前的通知xcode
1.在調用方法時,有些方法讓人很難區分,容易寫錯方法,這讓開發者有時候很苦惱。安全
2.應用在運行時和非運行時捕獲通知的路徑還不一致。性能優化
3.應用在前臺時,是沒法直接顯示遠程通知,還須要進一步處理。網絡
4.已經發出的通知是不能更新的,內容發出時是不能改變的,而且只有簡單文本展現方式,擴展性根本不是很好。app
iOS 10 開始的通知框架
1.全部相關通知被統一到了UserNotifications.framework
框架中。ide
2.增長了撤銷、更新、中途還能夠修改通知的內容。性能
3.通知不在是簡單的文本了,能夠加入視頻、圖片,自定義通知的展現等等。
4.iOS 10相對以前的通知來講更加好用易於管理,而且進行了大規模優化,對於開發者來講是一件好事。
5.iOS 10開始對於權限問題進行了優化,申請權限就比較簡單了(本地與遠程通知集成在一個方法中)。
iOS 10 通知學習相關資料:
UserNotifications: 蘋果官方文檔 - 蘋果官方視頻1 - 蘋果官方視頻2 - 蘋果官方視頻3
活久見的重構 - iOS 10 UserNotifications 框架解析
WWDC2016 Session筆記 - iOS 10 推送Notification新特性
iOS 9中默認非HTTS的網絡是被禁止的,固然咱們也能夠把NSAllowsArbitraryLoads
設置爲YES
禁用ATS
。不過iOS 10從2017年1月1日起蘋果不容許咱們經過這個方法跳過ATS
,也就是說強制咱們用HTTPS
,若是不這樣的話提交App可能會被拒絕。可是咱們能夠經過NSExceptionDomains
來針對特定的域名開放HTTP
能夠容易經過審覈。
參考學習文章以下:
關於 iOS 10 中 ATS 的問題
iOS 10 開始對隱私權限更加嚴格,若是你不設置就會直接崩潰,如今不少遇到崩潰問題了,通常解決辦法都是在info.plist
文件添加對應的Key
-Value
就能夠了。
上圖的訪問相冊
的Key
添加錯了,正確的是Privacy - Photo Library Usage Description
。
以上Value
值,圈出的紅線部分的文字是展現給用戶看的,必須添加。目前解決辦法基本都同樣,參考學習文章以下:
兼容iOS 10:配置獲取隱私數據權限聲明
上圖咱們看到,本身新建的一個工程啥也沒幹就打印一堆爛七八糟的東西,我以爲這個應該是Xcode 8
的問題,具體也沒細研究,解決辦法是設置OS_ACTIVITY_MODE : disable
以下圖:
相關問題鏈接:
stackoverflow問答
在咱們開發中有可能用到UIStatusBar
一些屬性,在iOS 10 中這些方法已通過期了,若是你的項目中有用的話就得須要適配。上面的圖片也能發現,若是在iOS 10中你須要使用preferredStatusBar
好比這樣:
//iOS 10 - (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleDefault; }
隨着開發者對UICollectionView
的信賴,項目中用的地方也比較多,可是仍是存在一些問題,好比有時會卡頓、加載慢等。因此iOS 10 對UICollectionView
進一步的優化,由於敘述起來比較複雜耗費時間,在這裏只提供學習參考文章以下:
WWDC2016 Session筆記 - iOS 10 UICollectionView新特性
如下是官方文檔的說明:
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.
由於以前咱們都是用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);
// 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
枚舉,指示文本輸入區域所指望的語義意義。
使用此屬性能夠給鍵盤和系統信息,關於用戶輸入的內容的預期的語義意義。例如,您能夠指定一個文本字段,用戶填寫收到一封電子郵件確認uitextcontenttypeemailaddress
。當您提供有關您指望用戶在文本輸入區域中輸入的內容的信息時,系統能夠在某些狀況下自動選擇適當的鍵盤,並提升鍵盤修正和主動與其餘文本輸入機會的整合。
當咱們手機系統字體改變了以後,那咱們App
的label
也會跟着一塊兒變化,這須要咱們寫不少代碼來進一步處理才能實現,可是iOS 10 提供了這樣的屬性adjustsFontForContentSizeCategory
來設置。由於沒有真機,具體實際操做還沒去實現,若是理解錯誤幫忙指正。
UILabel *myLabel = [UILabel new]; /* UIFont 的preferredFontForTextStyle: 意思是指定一個樣式,並讓字體大小符合用戶設定的字體大小。 */ myLabel.font =[UIFont preferredFontForTextStyle: 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
那麼就支持刷新功能:
@property (nonatomic, strong, nullable) UIRefreshControl *refreshControl NS_AVAILABLE_IOS(10_0) __TVOS_PROHIBITED;
判斷系統版本是咱們常常用到的,尤爲是如今你們都有可能須要適配iOS 10,那麼問題就出現了,以下圖:
咱們獲得了答案是:
//值爲 1 [[[[UIDevice currentDevice] systemVersion] substringToIndex:1] integerValue] //值爲10.000000 [[UIDevice currentDevice] systemVersion].floatValue, //值爲10.0 [[UIDevice currentDevice] systemVersion]
因此說判斷系統方法最好仍是用後面的兩種方法,哦~我忘記說了[[UIDevice currentDevice] systemVersion].floatValue
這個方法也是不靠譜的,好像在8.3
版本輸出的值是8.2
,記不清楚了反正是不靠譜的,因此建議你們用[[UIDevice currentDevice] systemVersion]
這個方法!
Swift判斷以下:
if #available(iOS 10.0, *) { // iOS 10.0 print("iOS 10.0"); } else { }
參考文章以下:
iOS 平常工做之經常使用宏定義大全
你們都升級了Xcode 8
,可是對於插件依賴的開發者們,一邊哭着一邊去網上尋找解決辦法。那麼下面是解決辦法:
讓你的 Xcode8 繼續使用插件
可是看到文章最後的解釋,咱們知道若是用插件的話,可能安全上會有問題、而且提交審覈會被拒絕,因此建議你們仍是不要用了,解決辦法老是有的,好比在Xcode
中添加註釋的代碼塊也是很方便的。
我用Xcode 8
和Xcode 7.3
分別測試了下,以下圖:
建立一個Label
而後讓它自適應大小,字體大小都是17
最後輸出的寬度是不同的,咱們再看一下,下面的數據就知道爲何升級iOS 10
以後App
中有的文字顯示不全了:
Xxode 8打印 | Xcode 7.3打印 |
---|---|
1個文字寬度:17.5 | 1個文字寬度:17 |
2個文字寬度:35 | 2個文字寬度:34 |
3個文字寬度:52 | 3個文字寬度:51 |
4個文字寬度:69.5 | 4個文字寬度:68 |
5個文字寬度:87 | 5個文字寬度:85 |
6個文字寬度:104 | 6個文字寬度:102 |
7個文字寬度:121.5 | 7個文字寬度:119 |
8個文字寬度:139 | 8個文字寬度:136 |
9個文字寬度:156 | 9個文字寬度:153 |
10個文字寬度:173.5 | 10個文字寬度:170 |
英文字母會不會也有這種問題,我又經過測試,後來發現英文字母沒有問題,只有漢字有問題。目前只有一個一個修改控件解決這個問題,暫時沒有其餘好辦法來解決。