iOS 13 正式發佈,來看看有哪些 API 變動

来源:https://www.cnblogs.com/yubingyang/archive/2019/09/21/11561492.html
-Advertisement-
Play Games

iOS 13 已正式發佈,網上對其用戶體驗上的新特性的描述也很多。對於開發來說,需要關註的另一方面是新系統在 API 層面做了哪些改動,從而會對我們現有的代碼產生什麼影響。 在這裡,我們基於 iOS 13 Release Notes 做了一些整理,主要是列表出 Apple 提供的一些新的 API 和 ...


iOS 13 已正式發佈,網上對其用戶體驗上的新特性的描述也很多。對於開發來說,需要關註的另一方面是新系統在 API 層面做了哪些改動,從而會對我們現有的代碼產生什麼影響。

在這裡,我們基於 iOS 13 Release Notes 做了一些整理,主要是列表出 Apple 提供的一些新的 API 和棄用了哪些 API,一起來看看

General
• iOS 13 不再支持 UIApplicationExitsOnSuspend。需要更新應用以處理現代多任務處理。

UIKit
• 當單元格突出顯示或選中時,UITableViewCell 類不再更改 contentView 及其任何子視圖的 backgroundColor 或 opaque 屬性。如果要在 contentView 內部(包括)內容的任何子視圖上設置不透明的 backgroundColor,則單元格突出顯示或選中時的外觀可能會受到影響。解決子視圖任何問題的最簡單方法是確保將 backgroundColor 設置為 nil 或 clearColor,並且設置它們的 opaque 屬性為 false。但是,如果需要,您可以重寫 setHighlighted:animated: 和 setSelected:animated: 方法,以便在移動到突出顯示的狀態和選定狀態時手動更改子視圖上的這些屬性。

• 從iOS 8開始,將 UISearchController 與 UINavigationController 一起使用需要將頂視圖控制器的 definesPresentationContext 屬性設置為 true。如果不這樣做會導致難以檢測和調試的細微錯誤。從 iOS & iPadOS 13 beta 開始,如果視圖控制器的 navigationItem 具有 non-nil 搜索控制項,當視圖控制器顯示在導航控制器中時,UINavigationController 會自動將該視圖控制器的 definesPresentationContext 屬性設置為 true。如果您要定位早期版本的 iOS,請在搜索控制器變為活動狀態之前設置此屬性。

• UIRefreshControl 類不再直接修改其滾動視圖的 contentInset。 相反,它對內容插入的調整將合併到滾動視圖的 adjustContentInset 中。 唯一的例外是當滾動視圖的 contentInsetAdjustmentBehavior 設置為 UIScrollViewContentInsetAdjustmentNever 時,在這種情況下,UIRefreshControl 實例將像以前的版本一樣直接修改 contentInset。

• 如果通過覆蓋 sizeThatFits 在 UITableView 中實現自調整單元格而不使用自動佈局,則返回的高度將被解釋為單元格的 contentView 所需的高度,UITableViewCell 會自動添加為單元格留出空間所需的任何其他高度 分隔器。如果以這種方式實現手動自調整大小,則在 UITableViewCell 上調用 sizeThatFits: 時,單元格的 contentView 寬度可以保證準確,以便在手動佈局計算中使用。

• Trait環境(例如視圖和視圖控制器)現在在初始化期間使用 traits 填充 traitCollection 屬性。這些初始特征表示特征環境在添加到層次結構時將接收的最終特征的預測。因為在初始化期間填充的特征只是一個預測,它們可能與實際在層次結構中接收的特征不同。因此,在可能的情況下,您應該等待執行使用 traitCollection 的工作,直到視圖或視圖控制器的視圖移動到層次結構中 - 意味著視窗返回非零值 - 這樣您就不必丟棄任何工作,如果實際特征不同,則使用預測的特征完成。使用 traitCollection 的最佳時間是在佈局期間,例如 layoutSubviews,viewWillLayoutSubviews 或 viewDidLayoutSubviews 內部。

• 只有當特征值發生變化時,才會調用 traitCollectionDidChange: 方法。重要的是,由於特征集合現在初始化為目標層次結構中最終特征的預測,當初始預測特征與層次結構中的最終特征匹配時,特征環境添加到層次結構時將不會調用 traitCollectionDidChange:。因為 traitCollectionDidChange: 旨在作為無效回調來通知您一個或多個特征已更改,請審核此方法的現有實現,以及 UIContentContainer 方法willTransitionToTraitCollection:withTransitionCoordinator:,用於您可能依賴它的地方觸發初始設置。懶惰地執行使用 traitCollection 的工作的最佳位置是在上面討論的 layoutSubviews 方法之一,但請記住,這些佈局方法在任何時候佈局都會被調用,所以一定要避免在不需要時重覆工作。

• 您現在可以啟用調試日誌記錄,以便在您自己的類上調用 traitCollectionDidChange: 或willTransitionToTraitCollection:withTransitionCoordinator: 時。使用以下啟動參數打開日誌記錄:-UITraitCollectionChangeLoggingEnabled YES。您可能希望在使用此啟動參數並從 Xcode 運行應用程式時暫時禁用主線程檢查程式,以避免為不相關的類添加額外的日誌消息。

• UITableViewCell 類的 contentView 屬性始終與前面和後面的相鄰附件進行邊對邊佈局。這簡化了佈局代碼,因此想要正確的預設偏移的開發人員不再需要將其內容與內容視圖邊框或佈局邊距對齊,具體取決於尾部是否有附件。您現在應該始終在單元格內容視圖的佈局邊距上佈置代碼以獲取預設的系統插入。這些插入將根據單元格中可見的附件自動調整,以匹配系統的預設間距。

• 您現在可以從創建 block 調用自定義初始化程式,該創建塊通過 instantiateInitialViewController(creator:) 或 instantiateViewController(identifier:creator:) 傳遞。這使您可以使用其他上下文和參數初始化視圖控制器,同時利用通過 Interface Builder 在故事板中定義它們。自定義控制器初始化程式必須調用其 super.init(coder:) 方法並傳遞它通過創建塊接收的編碼器參數。

網路
• 為了增強安全性,當伺服器發送 Content-Type:application/octet-stream 時,NSURLSession 不再嗅探 MIME 類型。

• NSURLRequestReloadRevalidatingCacheData 和 NSURLRequestReloadIgnoringLocalAndRemoteCacheData API現已可用。

• 從 iOS 13 beta 4 開始,強制執行 NSMutableURLRequest 的 HTTPBodyStream 屬性的 copy 操作。如果在調用屬性設置器後對 body 數據進行了修改,則 HTTP 請求中發送的數據將不包含該更變。調用該屬性的 getter 不再返回 NSMutableData 引用,即使使用該類型的數據調用 setter 也是如此。從 iOS 13 beta 5 開始,使用 iOS 12 SDK 或以前的 SDK 構建的應用程式使用舊版行為。

CNCopyCurrentNetworkInfo API 返回的信息已無法反映真實情況。有關更多詳細信息,請參閱更新的API文檔和標題。

• 包含 body 的 GET HTTP 方法的所有 NSURLSessionTask 實例現在都會拋出錯誤 NSURLErrorDataLengthExceedsMaximum。

• 刪除了對代理自動配置(PAC)的 FTP 和文件URL方案的支持。HTTP 和 HTTPS 是 PAC 唯一支持的 URL 方案。這會影響所有 PAC 配置,包括但不限於使用“設置”,“系統偏好設置”,“配置文件”和 NSURLSession API(如connectionProxyDictionary 和CFNetworkExecuteProxyAutoConfigurationURL)設置的配置。

• NSURLSession 和 NSURLConnection API 不再支持 SPDY。伺服器應使用 HTTP 2 或 HTTP 1.1。

音頻
• 現在可以在 AVAudioEngine 上啟用語音處理模式。

• 新的 AVAudioNode 類型可用於包裝用戶定義的 block,以實時發送或接收數據。

• 基於 AVAudioEngine 的應用程式可以使用一種新方法來檢索附加到 AVAudioEngine 實例的所有節點的列表。

• AVAudioEnvironmentNode 中的新渲染模式基於輸出設備自動選擇最佳空間音頻渲染演算法。

• 一個新的 AVAudioSession 屬性允許在會話主動使用音頻輸入時播放系統聲音和觸覺。

• 新的枚舉 AVAudioSessionPromptStyle 根據系統中的其他音頻活動通知應用程式應該播放哪種語音提示。

• AVAudioSessionRouteSharingPolicy 現在允許應用指定路由共用策略,以便其音頻和視頻路由到與 AirPlay 相同的位置。

• Audio Unit Extensions 現在支持所有宿主應用程式中可用的用戶預設。

• OpenAL框架已棄用,出於相容性目的暫時保留。過渡到 AVAudioEngine 以獲得 3D 音頻功能。

• AUGraph 已被棄用,轉而支持 AVAudioEngine。

• 不推薦使用應用間音頻。使用 Audio Units 支持此功能。

• 不推薦使用基於 Carbon 的 Audio Units,在將來的版本中不再支持。

• 不再支持舊版 Core Audio HAL 音頻硬體插件。將音頻伺服器插件用於支持音頻驅動程式。

音頻共用
• 音頻共用與 AirPods(第1代或更高版本)和 PowerBeats Pro 相容。需要 iPhone 8 或更高版本。

AVFoundation
• AVFoundation 現在支持使用 HEVC 和 Alpha 通道編碼視頻。以這種方式編碼的視頻在 AVFoundation API 和網頁中的 Safari 中得到廣泛支持。格式的技術細節可以在互操作性配置文件規範中找到。

Core Image
• filterWithImageURL:options: 和 filterWithImageData:options: 不再支持 RAW 5 及更早版本。 版本 6 及更高版本仍然受支持。

• 添加了用於實例化和修改內置 Core Image 過濾器的新 API。

• 增強了 CICoreMLModel 過濾器以支持具有 MLFeatureTypeMultiArray 類型的輸入或輸出的模型。

• Metal CIKernel 實例支持具有任意結構化數據的參數。

• Metal CIKernel 實例支持返回一組2×2像素。

• CIFormat 符號的整數值(例如 kCIFormatARGB8)已更改為跨平臺一致性的新值集合。以前的值仍然支持向後相容; 但是,您應該避免對特定數值的依賴性。

Mail
• 現在可以在“設置”>“郵件”中啟用“忽略已阻止的發件人”。被阻止的聯繫人列表與 Messages,FaceTime 和 Phone 共用。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 規範總結 所有資料庫對象名稱必須使用小寫字母並用下劃線分割 所有資料庫對象名稱禁止使用 MySQL 保留關鍵字【設計表後逐一排查】 所有表必須使用 Innodb 存儲引擎,資料庫和表的字元集統一使用 UTF8 所有表和欄位都需要添加註釋 禁止在資料庫中存儲圖片,文件等大的二進位數據 【 通常存儲於文 ...
  • MySQL是Oracle公司開發、發佈和支持的最流行的開源SQL資料庫管理系統。 ...
  • 一 題目 二 答案 1、查詢所有的課程的名稱以及對應的任課老師姓名 SELECT course.cname, teacher.tname FROM course INNER JOIN teacher ON course.teacher_id = teacher.tid; 2、查詢學生表中男女生各有多 ...
  • Java 插件是構建 JVM 項目的基礎,它為項目增加了很多能力,例如編譯,測試,打包,發佈等等。 很多插件都是基於 Java 插件實現的,例如 Android 插件。 ...
  • ### 前言 說道自定義View,我們一定會想到,自定義View的繪製流程 - 測量階段(measure) - 佈局階段(layout) - 繪製階段(draw) 我們看到的一些炫酷的view效果,都是在繪製方法里去實現的, 也就是`draw(Canvas)`, 我們先放下 測量與佈局, 先從繪製基 ...
  • 什麼是記憶體泄露? 什麼是記憶體泄露? 就是該回收的記憶體由於種種原因沒有被回收,還駐留在記憶體中。 記憶體泄露有什麼影響? 可能一處小小的記憶體泄露就會導致整個應用卡頓,甚至崩潰。 例子說明: 這段代碼可能會出現記憶體泄露。 為什麼說可能會造成記憶體泄露? 如果在Toast消失之前,Toast 持有了當前的 Ac ...
  • source for "Android 28 platform" not found 解決辦法:點擊右上角的Download,但是下載完點擊Refresh之後沒有反應,這時候需要重新關聯sdk。 具體方法:File->Appearence&Behavior->System Settings->And ...
  • 我按照ExoPlayer的github指引添加 發現根本run不起來,並報錯如題 後來在stackoverflow找到瞭解決方案,來源為:https://stackoverflow.com/questions/46949622/android studio 3 0 unable to resolve ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...