天天看點

【ios開發技術研究】Xcode8 及iOS10适配問題整理彙總

1.Notification(通知)

自從Notification被引入之後,蘋果就不斷的更新優化,但這些更新優化隻是小打小鬧,直至現在iOS 10開始真正的進行大改重構,這讓開發者也體會到UserNotifications的易用,功能也變得非常強大。

iOS 9 以前的通知

1.在調用方法時,有些方法讓人很難區分,容易寫錯方法,這讓開發者有時候很苦惱。

2.應用在運作時和非運作時捕獲通知的路徑還不一緻。

3.應用在前台時,是無法直接顯示遠端通知,還需要進一步處理。

4.已經發出的通知是不能更新的,内容發出時是不能改變的,并且隻有簡單文本展示方式,擴充性根本不是很好。

iOS 10 開始的通知

1.所有相關通知被統一到了UserNotifications.framework架構中。

2.增加了撤銷、更新、中途還可以修改通知的内容。

3.通知不在是簡單的文本了,可以加入視訊、圖檔,自定義通知的展示等等。

4.iOS 10相對之前的通知來說更加好用易于管理,并且進行了大規模優化,對于開發者來說是一件好事。

5.iOS 10開始對于權限問題進行了優化,申請權限就比較簡單了(本地與遠端通知內建在一個方法中)。

如果使用了推送: 

【ios開發技術研究】Xcode8 及iOS10适配問題整理彙總

2.ATS的問題

iOS 9中預設非HTTS的網絡是被禁止的,當然我們也可以把NSAllowsArbitraryLoads設定為YES禁用ATS。不過iOS 10從2017年1月1日起蘋果不允許我們通過這個方法跳過ATS,也就是說強制我們用HTTPS,如果不這樣的話送出App可能會被拒絕。但是我們可以通過NSExceptionDomains來針對特定的域名開放HTTP可以容易通過稽核。

NSExceptionDomains方式 設定域。可以簡單了解成,把不支援https協定的接口設定成http的接口。

具體方法:

1)、在項目的info.plist中添加一個Key:App Transport Security Settings,類型為字典類型。

2)、然後給它添加一個Exception Domains,類型為字典類型;

3)、把需要的支援的域添加給Exception Domains。其中域作為Key,類型為字典類型。

4)、每個域下面需要設定3個屬性:NSIncludesSubdomains、NSExceptionRequiresForwardSecrecy、NSExceptionAllowsInsecureHTTPLoads。

如圖:

【ios開發技術研究】Xcode8 及iOS10适配問題整理彙總

細節提示:在iOS9以後的系統中如果使用到網絡圖檔,也要注意網絡圖檔是否是HTTP的哦,如果是,也要把圖檔的域設定哦!

3.iOS 10 隐私權限設定

iOS 10 開始對隐私權限更加嚴格,如果你不設定就會直接崩潰,現在很多遇到崩潰問題了,一般解決辦法都是在info.plist檔案添加對應的Key-Value就可以了。 

(錯誤: This app attempts to access privacy-sensitive data without a usage description. The app’s Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the user how the app uses this data.—通路相冊失敗,請求權限 

This app attempts to access privacy-sensitive data without a usage description. The app’s Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data.–通路相機(二維碼識别等)錯誤,要求相機權限 

【ios開發技術研究】Xcode8 及iOS10适配問題整理彙總

以上Value值,圈出的紅線部分的文字是展示給使用者看的,必須添加。

4.Xcode 8 運作一堆沒用的logs解決辦法

Xcode8代碼出現ubsystem: com.apple.UIKit, category: HIDEventFiltered, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0,,enable_oversize: 1, privacy_setting: 2, enable_private_data: 0 2016-09-14 17:18:55.843428 MyApp[6880:340837]

自己建立的一個工程啥也沒幹就列印一堆爛七八糟的東西,我覺得這個應該是Xcode 8的問題,

具體也沒細研究,解決辦法是設定OS_ACTIVITY_MODE : disable 

【product】-【scheme】-【Edit Scheme】-【Run】-【Argument】-【Environment Variable】添加keyValue【OS_ACTIVITY_MODE disable】可以停止輸出列印此日志

5.iOS 10 UIStatusBar方法過期:

在我們開發中有可能用到UIStatusBar一些屬性,在iOS 10 中這些方法已經過期了,如果你的項目中有用的話就得需要适配。 

【ios開發技術研究】Xcode8 及iOS10适配問題整理彙總

UIStatusBarStyle 和 prefersStatusBarHidden這兩個屬性是readonly readonly readonly也就是說我們如果在iOS 10中調用,你需要使用preferredStatusBar比如這樣:

//iOS 10

<code class="hljs haml has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;">-<span class="ruby" style="box-sizing: border-box;"> (<span class="hljs-constant" style="box-sizing: border-box;">BOOL</span>)prefersStatusBarHidden{
</span>    return YES;
}
-<span class="ruby" style="box-sizing: border-box;"> (<span class="hljs-constant" style="box-sizing: border-box;">UIStatusBarStyle</span>)preferredStatusBarStyle {    
</span>
  return UIStatusBarStyleDefault;

}
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul>
           

6.iOS 10 UICollectionView 性能優化

随着開發者對UICollectionView的信賴,項目中用的地方也比較多,但是還是存在一些問題,比如有時會卡頓、加載慢等。是以iOS 10 對UICollectionView進一步的優化。 

UICollectionView cell pre-fetching預加載機制UICollectionView and UITableView prefetchDataSource 新增的API針對self-sizing cells 的改進Interactive reordering  

 在iOS 10 之前,UICollectionView上面如果有大量cell,當使用者活動很快的時候,整個UICollectionView的卡頓會很明顯,為什麼會造成這樣的問題,這裡涉及到了iOS 系統的重用機制,當cell準備加載進螢幕的時候,整個cell都已經加載完成,等待在螢幕外面了,也就是整整一行cell都已經加載完畢,這就是造成卡頓的主要原因,專業術語叫做:掉幀.要想讓使用者感覺不到卡頓,我們的app必須幀率達到60幀/秒,也就是說每幀16毫秒要重新整理一次. 

  

iOS 10 之前UICollectionViewCell的生命周期是這樣的: 

1.使用者滑動螢幕,螢幕外有一個cell準備加載進來,把cell從reusr隊列拿出來,然後調用prepareForReuse方法,在這個方法裡面,可以重置cell的狀态,加載新的資料; 

2.繼續滑動,就會調用cellForItemAtIndexPath方法,在這個方法裡面給cell指派模型,然後傳回給系統; 

3.當cell馬上進去螢幕的時候,就會調用willDisplayCell方法,在這個方法裡面我們還可以修改cell,為進入螢幕做最後的準備工作; 

  

iOS 10 UICollectionViewCell的生命周期是這樣的: 

1.使用者滑動螢幕,螢幕外有一個cell準備加載進來,把cell從reusr隊列拿出來,然後調用prepareForReuse方法,在這裡當cell還沒有進去螢幕的時候,就已經提前調用這個方法了,對比之前的差別是之前是cell的上邊緣馬上進去螢幕的時候就會調用該方法,而iOS 10 提前到cell還在螢幕外面的時候就調用; 

2.在cellForItemAtIndexPath中建立cell,填充資料,重新整理狀态等操作,相比于之前也提前了; 

3.使用者繼續滑動的話,當cell馬上就需要顯示的時候我們再調用willDisplayCell方法,原則就是:何時需要顯示,何時再去調用willDisplayCell方法; 

4.當cell完全離開螢幕以後,會調用didEndDisplayingCell方法,跟之前一樣,cell會進入重用隊列.

在iOS 10 之前,cell隻能從重用隊列裡面取出,再走一遍生命周期,并調用cellForItemAtIndexPath建立或者生成一個cell.在iOS 10 中,系統會cell儲存一段時間,也就是說當使用者把cell滑出螢幕以後,如果又滑動回來,cell不用再走一遍生命周期了,隻需要調用willDisplayCell方法就可以重新出現在螢幕中了. 

iOS 10 中,系統是一個一個加載cell的,二以前是一行一行加載的,這樣就可以提升很多性能;iOS 10 新增加的Pre-Fetching預加載這個是為了降低UICollectionViewCell在加載的時候所花費的時間,在 iOS 10 中,除了資料源協定和代理協定外,新增加了一個UICollectionViewDataSourcePrefetching協定,這個協定裡面定義了兩個方法: 

<code class="hljs erlang has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;"><span class="hljs-pp" style="box-sizing: border-box;">- <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(void)</span>collectionView:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">UICollectionView</span> *)</span>collectionView prefetchItemsAtIndexPaths:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">NSArray</span>*)</span>indexPaths NS_AVAILABLE_IOS<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>_0)</span>;  
-<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(void)</span>collectionView:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">UICollectionView</span>*)</span>collectionView cancelPrefetchingForItemsAtIndexPaths:<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-variable" style="box-sizing: border-box;">NSArray</span>*)</span>indexPaths  NS_AVAILABLE_IOS<span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>_0)</span>;</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>
           

在ColletionView prefetchItemsAt indexPaths這個方法是異步預加載資料的,當中的indexPaths數組是有序的,就是item接收資料的順序;

CollectionView cancelPrefetcingForItemsAt indexPaths這個方法是可選的,可以用來處理在滑動中取消或者降低提前加載資料的優先級.

注意:這個協定并不能代替之前讀取資料的方法,僅僅是輔助加載資料.

Pre-Fetching預加載對UITableViewCell同樣适用.

7.iOS 10 UIColor 新增方法

以下是官方文檔的說明:

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. 

(譯:大多數圖形架構整個系統,包括核心圖形核心形象,金屬,和AVFoundation,有擴充範圍的像素格式和寬色域的色彩空間大幅改善的支援。通過将此行為擴充到整個圖形堆棧中,它比以往任何時候都更容易支援具有寬顔色顯示的裝置。此外,UIKit規範在新擴充的sRGB色彩空間工作,是以很容易與其他顔色混合的sRGB顔色,更寬的色域不顯著的性能損失。) 

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. 

(譯:在iOS 10中,該UIColor類使用擴充的sRGB色彩空間和初始化不再夾原成分值在0和1之間。如果你的應用程式依賴UIKit夾緊元件值(無論你是建立一個顔色或要求顔色其元件的值),你需要改變你的應用程式的行為時,你的連結和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. 

(譯:當執行在iPad上親一個UIView的自定義繪制(9.7英寸),基本的繪圖環境配置一個擴充的sRGB色彩空間。) 

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. 

(譯:如果你的應用程式提供自定義的圖像對象,使用新的uigraphicsimagerenderer類控制是否目标位圖是使用擴充的範圍或标準格式建立。) 

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. 

(譯:如果您正在使用較低級别的接口,如核心圖形或金屬,在寬色域裝置上執行自己的圖像處理,則應該使用擴充的範圍顔色空間和支援16位浮點元件值的像素格式。當對顔色值進行夾緊是必要的,你應該明确地這樣做。) 

Core Graphics, Core Image, and Metal Performance Shaders provide new options for easily converting colors and images between color spaces. 

(譯:圖形核心,核心形象,和金屬的性能提供了新的選擇,很容易着色的顔色和圖像之間的顔色空間轉換。) 

因為之前我們都是用RGB來設定顔色,反正用起來也不是特别多樣化,這次新增的方法應該就是一個彌補吧。是以在iOS 10 蘋果官方建議我們使用sRGB,因為它性能更好,色彩更豐富。如果你自己為UIColor寫了一套分類的話也可嘗試替換為sRGB,UIColor類中新增了兩個Api如下:

<code class="hljs objectivec has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;">+(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">UIColor</span> *)colorWithDisplayP3Red:(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">CGFloat</span>)displayP3Red green:(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">CGFloat</span>)green blue:(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">CGFloat</span>)blue alpha:(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">CGFloat</span>)alpha NS_AVAILABLE_IOS(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>_0);

-(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">UIColor</span> *)initWithDisplayP3Red:(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">CGFloat</span>)displayP3Red green:(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">CGFloat</span>)green blue:(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">CGFloat</span>)blue alpha:(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">CGFloat</span>)alpha NS_AVAILABLE_IOS(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>_0);</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>
           

8.iOS 10 UITextContentType

// The textContentType property is to provide the keyboard with extra information about the semantic intent of the text [email protected](nonatomic,copy) UITextContentType textContentType NS_AVAILABLE_IOS(10_0); // default is nil

在iOS 10 UITextField添加了textContentType枚舉,訓示文本輸入區域所期望的語義意義。

使用此屬性可以給鍵盤和系統資訊,關于使用者輸入的内容的預期的語義意義。例如,您可以指定一個文本字段,使用者填寫收到一封電子郵件确認uitextcontenttypeemailaddress。當您提供有關您期望使用者在文本輸入區域中輸入的内容的資訊時,系統可以在某些情況下自動選擇适當的鍵盤,并提高鍵盤修正和主動與其他文本輸入機會的整合。

9.iOS 10 字型随着手機系統字型而改變

當我們手機系統字型改變了之後,那我們App的label也會跟着一起變化,這需要我們寫很多代碼來進一步處理才能實作,但是iOS 10 提供了這樣的屬性adjustsFontForContentSizeCategory來設定。因為沒有真機,具體實際操作還沒去實作,如果了解錯誤幫忙指正。

<code class="hljs objectivec has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;"><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">UILabel</span> *myLabel = [<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">UILabel</span> new];  <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*
UIFont 的preferredFontForTextStyle: 意思是指定一個樣式,并讓字型大小符合使用者設定的字型大小。
*/</span>


myLabel<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.font</span> =[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">UIFont</span> preferredFontForTextStyle: UIFontTextStyleHeadline]; <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">/*
訓示是否應自動更新相應元素的字型時,裝置的uicontentsizecategory。
這個屬性生效,元素的字型必須使用+ preferredfontfortextstyle:
或+ preferredfontfortextstyle:compatiblewithtraitcollection:一個有效的uifonttextstyle。
*/</span>

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//是否更新字型的變化</span>

myLabel<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.adjustsFontForContentSizeCategory</span> = <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">YES</span>;</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li></ul>
           

10.iOS 10 UIScrollView新增refreshControl

【ios開發技術研究】Xcode8 及iOS10适配問題整理彙總

iOS 10 以後隻要是繼承UIScrollView那麼就支援重新整理功能:

<code class="hljs objectivec has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@property</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">nonatomic</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">strong</span>, nullable) UIRefreshControl *refreshControl NS_AVAILABLE_IOS(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>_0) __TVOS_PROHIBITED;
- (instancetype)init;

<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@property</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">nonatomic</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">readonly</span>, getter=isRefreshing) <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">BOOL</span> refreshing;

<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@property</span> (null_resettable, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">nonatomic</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">strong</span>) <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">UIColor</span> *tintColor;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@property</span> (nullable, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">nonatomic</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">strong</span>) NSAttributedString *attributedTitle UI_APPEARANCE_SELECTOR;

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// May be used to indicate to the refreshControl that an external event has initiated the refresh action</span>
- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)beginRefreshing NS_AVAILABLE_IOS(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">6</span>_0);
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Must be explicitly called when the refreshing has completed</span>
- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)endRefreshing NS_AVAILABLE_IOS(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">6</span>_0);

</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li></ul>
           

11.iOS 10 判斷系統版本正确姿勢

判斷系統版本是我們經常用到的,尤其是現在大家都有可能需要适配iOS 10,那麼問題就出現了,如下圖: 

【ios開發技術研究】Xcode8 及iOS10适配問題整理彙總

我們得到了答案是:

<code class="hljs cs has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//值為 1 [[[[UIDevice currentDevice] systemVersion] substringToIndex:1] integerValue]</span>

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//值為10.000000 [[UIDevice currentDevice] systemVersion].floatValue,</span>

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//值為10.0 [[UIDevice currentDevice] systemVersion]</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>
           

是以說判斷系統方法最好還是用後面的兩種方法,哦~我忘記說了[[UIDevice currentDevice] systemVersion].floatValue這個方法也是不靠譜的,好像在8.3版本輸出的值是8.2,記不清楚了反正是不靠譜的,是以建議大家用[[UIDevice currentDevice] systemVersion]這個方法!

Swift判斷如下:

<code class="hljs php has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#available(iOS 10.0, *) {</span>

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// iOS 10.0</span>

<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">print</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"iOS 10.0"</span>);

} <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> { }
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul>
           

12.推送的時候,開啟Remote notificationsYou’ve implemented -[application:didReceiveRemoteNotification:fetchCompletionHandler:],

but you still need to add “remote-notification” to the list of your supported UIBackgroundModes in your Info.plist.

解決方案:需要在Xcode 中修改應用的 Capabilities 開啟Remote notifications,請參考下圖: 

【ios開發技術研究】Xcode8 及iOS10适配問題整理彙總

13.One of the two will be used. Which one is undefined.”

objc[5114]:Class PLBuildVersion is implemented in both /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/AssetsLibraryServices.framework/AssetsLibraryServices (0x1109a5910) and /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/PhotoLibraryServices.framework/PhotoLibraryServices (0x110738210). One of the two will be used. Which one is undefined.

在模拟器中、發現“One of the two will be used. Which one is undefined.”日志

查找資料發現原因:objc runtime 對所用app使用同一個命名空間(flat namespace),運作機制如下:

首先二進制映像被加載,檢查程式依賴關系

每一個二進制映像被加載的同時,程式的objc classes在objc runtime命名空間中注冊

如果具有相同名稱的類被再次加載,objc runtime的行為是不可預知的。一種可能的情況是任意一個程式的該類會被加載(這應該也是預設動作)

14.Xcode 8 Command + / 不能注釋

解決方法:在終端輸入 

//sudo /usr/libexec/xpccachectl 

重新開機電腦即可. 

另外:Xcode 推出來快速文本注釋:Command +Option +/

<code class="hljs java has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;"><span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**
 <#Description#>

<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> frame <#frame description#>

<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @return</span> <#return value description#>
 */</span>
- (instancetype)initWithFrame:(CGRect)frame
{
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (self = [<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">super</span> initWithFrame:frame]) {
        [self initUiConfig];
    }
    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> self;
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li></ul>
           

15證書問題

【ios開發技術研究】Xcode8 及iOS10适配問題整理彙總

這個問題剛開始估計大家都會碰到也是第一個要解決的問題 

這個問題就是一個證書的設定問題,下面看兩張圖 

正常我們會在BuildeSettings中設定證書:

【ios開發技術研究】Xcode8 及iOS10适配問題整理彙總

但是在xcode8.0中我們看到下面的新特性:

【ios開發技術研究】Xcode8 及iOS10适配問題整理彙總

相信大家都能看到在Genreal下面會有Siging,沒錯這就是新特性,為了友善使用者來管理,大家可以選擇Automatically manage signing。需要輸入開發者賬号!如果沒有賬号也沒關系,在下面也可以選擇Debug、Realease、inHouse模式下對應的證書也可以!

但是 但是 但是 如果你的證書如果是通配符類型的,但是你的app包含了比如推送、apple pay、他會報錯提示你未報含xx.id的manteid等等。是以你要生成針對你app的bundleid對應的證書!

16跳轉到app内的隐私資料設定頁面

我們知道使用者沒開啟,肯定要提醒使用者去設定開啟的吧,是以我們要跳轉到app的隐私資料界面。如何調用呢 

iOS10 之前調用方法:

<code class="hljs objectivec has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;"><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSURL</span>*url=[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSURL</span> URLWithString:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"prefs:root=LOCATION_SERVICES"</span>];
                                   [[<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">UIApplication</span> sharedApplication] openURL:url];</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>
           

但是iOS10 之後不能再調用此方法進行跳轉隐私設定界面. 

iOS10之後: 

1)定義一個宏友善調用

<code class="hljs cs has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//-----------------------系統權限設定路徑(iOS8以後适用)---------------------</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//url</span>
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#<span class="hljs-keyword" style="box-sizing: border-box;">define</span> SettingURL [NSURL URLWithString:UIApplicationOpenSettingsURLString]</span>
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//調到設定</span>
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#<span class="hljs-keyword" style="box-sizing: border-box;">define</span> GoToSetting <span class="hljs-keyword" style="box-sizing: border-box;">if</span>([[UIApplication sharedApplication] canOpenURL:SettingURL]) { \</span>
                        [[UIApplication sharedApplication] openURL:SettingURL];}}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>
           

調用

<code class="hljs cs has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//去設定</span>
        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (IOS8_OR_LATER) {
            GoToSetting;
        }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>
           

2,方法中直接調用 

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

17真彩色的顯示

真彩色的顯示會根據光感應器來自動的調節達到特定環境下顯示與性能的平衡效果,如果需要這個功能的話,可以在info.plist裡配置(在Source Code模式下):

<code class="hljs  has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;">UIWhitePointAdaptivityStyle</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>
           

它有五種取值,分别是:

<code class="hljs cs has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;">UIWhitePointAdaptivityStyleStandard <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 标準模式</span>
UIWhitePointAdaptivityStyleReading <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 閱讀模式</span>
UIWhitePointAdaptivityStylePhoto <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 圖檔模式</span>
UIWhitePointAdaptivityStyleVideo <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 視訊模式</span>
UIWhitePointAdaptivityStyleStandard <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 遊戲模式</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>
           

如果你的項目是遊戲類的,就選擇UIWhitePointAdaptivityStyleStandard這個模式,五種模式的顯示效果是從上往下遞減,也就是說如果你的項目是圖檔處理類的,你選擇的是閱讀模式,給選擇太好的效果會影響性能.

原文位址:http://blog.csdn.net/c386890506/article/details/52603807

 【關于我們】

才淇(微信公衆号:caiqicehua),專注于國内各大網際網路公司社會招聘内推。每天更新最新網際網路名企(包括但不限于今日頭條、網易遊戲、BAT、網易網際網路、小米、京東、樂視、攜程等名企)内推資訊,有技術崗、有産品崗、有營運崗、有設計崗、有互動崗、有銷售崗,更有其他N多相關崗位!更多内推資訊請掃描以下二維碼關注查閱。

【ios開發技術研究】Xcode8 及iOS10适配問題整理彙總

繼續閱讀