iOS13適配總結(jié)举哟,iOS13 API變動

iOS 13 正式發(fā)布,來看看有哪些 API 變動


iOS 13 已正式發(fā)布迅矛,網(wǎng)上對其用戶體驗上的新特性的描述也很多炎滞。對于開發(fā)來說,需要關(guān)注的另一方面是新系統(tǒng)在 API 層面做了哪些改動诬乞,從而會對我們現(xiàn)有的代碼產(chǎn)生什么影響册赛。

在這里,我們基于 iOS 13 Release Notes 做了一些整理震嫉,主要是列表出 Apple 提供的一些新的 API 和棄用了哪些 API森瘪,一起來看看。

General

? iOS 13 不再支持UIApplicationExitsOnSuspend票堵。需要更新應(yīng)用以處理現(xiàn)代多任務(wù)處理扼睬。

UIKit

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

? 從iOS 8開始,將UISearchControllerUINavigationController 一起使用需要將頂視圖控制器的definesPresentationContext屬性設(shè)置為true边锁。如果不這樣做會導(dǎo)致難以檢測和調(diào)試的細微錯誤。從 iOS & iPadOS 13 beta 開始斥铺,如果視圖控制器的 navigationItem具有 non-nil 搜索控件笙纤,當(dāng)視圖控制器顯示在導(dǎo)航控制器中時抖拴,UINavigationController 會自動將該視圖控制器的 definesPresentationContext屬性設(shè)置為true。如果您要定位早期版本的 iOS腥椒,請在搜索控制器變?yōu)榛顒訝顟B(tài)之前設(shè)置此屬性阿宅。

? UIRefreshControl 類不再直接修改其滾動視圖的contentInset。相反笼蛛,它對內(nèi)容插入的調(diào)整將合并到滾動視圖的adjustContentInset 中洒放。唯一的例外是當(dāng)滾動視圖的 contentInsetAdjustmentBehavior設(shè)置為 UIScrollViewContentInsetAdjustmentNever 時,在這種情況下滨砍,UIRefreshControl 實例將像以前的版本一樣直接修改 contentInset往湿。

? 如果通過覆蓋 sizeThatFitsUITableView 中實現(xiàn)自調(diào)整單元格而不使用自動布局,則返回的高度將被解釋為單元格的 contentView 所需的高度惋戏,UITableViewCell會自動添加為單元格留出空間所需的任何其他高度 分隔器领追。如果以這種方式實現(xiàn)手動自調(diào)整大小,則在 UITableViewCell上調(diào)用sizeThatFits: 時响逢,單元格的 contentView寬度可以保證準(zhǔn)確绒窑,以便在手動布局計算中使用。

? Trait環(huán)境(例如視圖和視圖控制器)現(xiàn)在在初始化期間使用 traits 填充 traitCollection 屬性舔亭。這些初始特征表示特征環(huán)境在添加到層次結(jié)構(gòu)時將接收的最終特征的預(yù)測些膨。因為在初始化期間填充的特征只是一個預(yù)測,它們可能與實際在層次結(jié)構(gòu)中接收的特征不同钦铺。因此傀蓉,在可能的情況下,您應(yīng)該等待執(zhí)行使用 traitCollection 的工作职抡,直到視圖或視圖控制器的視圖移動到層次結(jié)構(gòu)中 - 意味著窗口返回非零值 - 這樣您就不必丟棄任何工作葬燎,如果實際特征不同,則使用預(yù)測的特征完成缚甩。使用 traitCollection 的最佳時間是在布局期間谱净,例如layoutSubviewsviewWillLayoutSubviewsviewDidLayoutSubviews 內(nèi)部擅威。

? 只有當(dāng)特征值發(fā)生變化時壕探,才會調(diào)用traitCollectionDidChange:方法。重要的是郊丛,由于特征集合現(xiàn)在初始化為目標(biāo)層次結(jié)構(gòu)中最終特征的預(yù)測李请,當(dāng)初始預(yù)測特征與層次結(jié)構(gòu)中的最終特征匹配時瞧筛,特征環(huán)境添加到層次結(jié)構(gòu)時將不會調(diào)用 traitCollectionDidChange:。因為traitCollectionDidChange: 旨在作為無效回調(diào)來通知您一個或多個特征已更改导盅,請審核此方法的現(xiàn)有實現(xiàn)较幌,以及 UIContentContainer 方法willTransitionToTraitCollection:withTransitionCoordinator:,用于您可能依賴它的地方觸發(fā)初始設(shè)置白翻。懶惰地執(zhí)行使用 traitCollection 的工作的最佳位置是在上面討論的 layoutSubviews方法之一乍炉,但請記住,這些布局方法在任何時候布局都會被調(diào)用滤馍,所以一定要避免在不需要時重復(fù)工作岛琼。

? 您現(xiàn)在可以啟用調(diào)試日志記錄,以便在您自己的類上調(diào)用traitCollectionDidChange:willTransitionToTraitCollection:withTransitionCoordinator: 時巢株。使用以下啟動參數(shù)打開日志記錄:-UITraitCollectionChangeLoggingEnabled YES槐瑞。您可能希望在使用此啟動參數(shù)并從 Xcode 運行應(yīng)用程序時暫時禁用主線程檢查程序,以避免為不相關(guān)的類添加額外的日志消息阁苞。

? UITableViewCell 類的contentView 屬性始終與前面和后面的相鄰附件進行邊對邊布局困檩。這簡化了布局代碼,因此想要正確的默認偏移的開發(fā)人員不再需要將其內(nèi)容與內(nèi)容視圖邊框或布局邊距對齊猬错,具體取決于尾部是否有附件窗看。您現(xiàn)在應(yīng)該始終在單元格內(nèi)容視圖的布局邊距上布置代碼以獲取默認的系統(tǒng)插入。這些插入將根據(jù)單元格中可見的附件自動調(diào)整倦炒,以匹配系統(tǒng)的默認間距显沈。

? 您現(xiàn)在可以從創(chuàng)建block調(diào)用自定義初始化程序,該創(chuàng)建塊通過 instantiateInitialViewController(creator:)instantiateViewController(identifier:creator:) 傳遞逢唤。這使您可以使用其他上下文和參數(shù)初始化視圖控制器拉讯,同時利用通過Interface Builder 在故事板中定義它們。自定義控制器初始化程序必須調(diào)用其super.init(coder:) 方法并傳遞它通過創(chuàng)建塊接收的編碼器參數(shù)鳖藕。

?presentViewController 控制器無法全屏顯示, 且可以下滑收回, 原因modalPresentationStyle屬性iOS 13之前默認為UIModalPresentationFullScreen, 之后為UIModalPresentationAutomatic, 修改方法:

LoginNewViewController * controller = [[LoginNewViewController alloc]init];
controller.modalPresentationStyle = UIModalPresentationFullScreen;
[self presentViewController:controller animated:YES completion:nil];

也可以在RootViewController里全局修改.

? KVC訪問私有Api statusBarWindow崩潰問題解決

if (@available(iOS 13.0, *)) {
     _statusBar = [[UIView alloc] initWithFrame:[UIApplication sharedApplication].statusBarFrame];
} else {
     statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
}

?tabBar顏色問題, push或者present控制器后, 再返回跟視圖, 點擊tabBar選中顏色, 變?yōu)槟J色藍色, 解決辦法

if (@available(iOS 13.0, *)) {
     [[UITabBar appearance] setUnselectedItemTintColor:Style.greenColor_1fdc84];
}if (@available(iOS 10.0, *)) {
     [self.tabBar setUnselectedItemTintColor:Style.greenColor_1fdc84];
} else {
        // Fallback on earlier versions
}

? overrideUserInterfaceStyle如果不想設(shè)配深色模式

if (@available(iOS 13.0, *)) {
        self.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
} else {
        // Fallback on earlier versions
}

Info.plist 文件添加key: User Interface Style value:Light
必須是Light, 不然打包時會報錯.

? UIStatusBarStyle 狀態(tài)欄顏色, 深色模式下默認都是白色, 適配辦法UINavigationController寫法

// 重寫這個方法才能讓 viewControllers 對 statusBar 的控制生效
- (UIStatusBarStyle)preferredStatusBarStyle {
    return self.topViewController.preferredStatusBarStyle;
}

其他控制器

// info.plist設(shè)置View controller-based status bar appearance = YES
// 如果為NO此方法不調(diào)用,需要這么設(shè)置,但iOS9.0已過期[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
// 動態(tài)修改 調(diào)用[self setNeedsStatusBarAppearanceUpdate]
// UIStatusBarStyleDefault          小于13.0:黑色 大于13.0:黑或白
// UIStatusBarStyleLightContent     都是白色
// UIStatusBarStyleDarkContent      13.0黑色

- (UIStatusBarStyle)preferredStatusBarStyle {
    if (@available(iOS 13.0, *)) {
        return UIStatusBarStyleDarkContent;
    } else {
        return UIStatusBarStyleDefault;
    }
}

網(wǎng)絡(luò)

? 為了增強安全性魔慷,當(dāng)服務(wù)器發(fā)送Content-Type:application/octet-stream時,NSURLSession不再嗅探 MIME 類型著恩。

? NSURLRequestReloadRevalidatingCacheDataNSURLRequestReloadIgnoringLocalAndRemoteCacheData API現(xiàn)已可用院尔。

? 從 iOS 13 beta 4 開始,強制執(zhí)行NSMutableURLRequestHTTPBodyStream 屬性的copy 操作喉誊。如果在調(diào)用屬性設(shè)置器后對body數(shù)據(jù)進行了修改邀摆,則 HTTP 請求中發(fā)送的數(shù)據(jù)將不包含該更變。調(diào)用該屬性的 getter 不再返回NSMutableData 引用伍茄,即使使用該類型的數(shù)據(jù)調(diào)用 setter 也是如此栋盹。從 iOS 13 beta 5 開始,使用 iOS 12 SDK 或以前的 SDK 構(gòu)建的應(yīng)用程序使用舊版行為敷矫。

? CNCopyCurrentNetworkInfo API 返回的信息已無法反映真實情況例获。有關(guān)更多詳細信息汉额,請參閱更新的API文檔和標(biāo)題。

? 包含 bodyGET HTTP 方法的所有NSURLSessionTask 實例現(xiàn)在都會拋出錯誤 NSURLErrorDataLengthExceedsMaximum榨汤。

? 刪除了對代理自動配置(PAC)的 FTP 和文件URL方案的支持蠕搜。HTTP 和 HTTPS 是 PAC 唯一支持的 URL 方案。這會影響所有 PAC 配置件余,包括但不限于使用“設(shè)置”讥脐,“系統(tǒng)偏好設(shè)置”遭居,“配置文件”和 NSURLSession API(如connectionProxyDictionaryCFNetworkExecuteProxyAutoConfigurationURL)設(shè)置的配置啼器。

? NSURLSessionNSURLConnection API 不再支持 SPDY。服務(wù)器應(yīng)使用 HTTP 2 或 HTTP 1.1俱萍。

音頻

? 現(xiàn)在可以在AVAudioEngine上啟用語音處理模式端壳。

? 新的 AVAudioNode 類型可用于包裝用戶定義的 block,以實時發(fā)送或接收數(shù)據(jù)枪蘑。

? 基于 AVAudioEngine 的應(yīng)用程序可以使用一種新方法來檢索附加到 AVAudioEngine實例的所有節(jié)點的列表损谦。

? AVAudioEnvironmentNode 中的新渲染模式基于輸出設(shè)備自動選擇最佳空間音頻渲染算法。

? 一個新的AVAudioSession 屬性允許在會話主動使用音頻輸入時播放系統(tǒng)聲音和觸覺岳颇。

? 新的枚舉 AVAudioSessionPromptStyle 根據(jù)系統(tǒng)中的其他音頻活動通知應(yīng)用程序應(yīng)該播放哪種語音提示照捡。

? AVAudioSessionRouteSharingPolicy 現(xiàn)在允許應(yīng)用指定路由共享策略,以便其音頻和視頻路由到與 AirPlay 相同的位置话侧。

? Audio Unit Extensions 現(xiàn)在支持所有宿主應(yīng)用程序中可用的用戶預(yù)設(shè)栗精。

? OpenAL框架已棄用,出于兼容性目的暫時保留瞻鹏。過渡到 AVAudioEngine 以獲得 3D 音頻功能悲立。

? AUGraph已被棄用,轉(zhuǎn)而支持AVAudioEngine新博。

? 不推薦使用應(yīng)用間音頻薪夕。使用 Audio Units 支持此功能。

? 不推薦使用基于 CarbonAudio Units赫悄,在將來的版本中不再支持原献。

? 不再支持舊版 Core Audio HAL 音頻硬件插件。將音頻服務(wù)器插件用于支持音頻驅(qū)動程序埂淮。

音頻共享

? 音頻共享與 AirPods(第1代或更高版本)和PowerBeats Pro 兼容姑隅。需要 iPhone 8 或更高版本。

AVFoundation

? AVFoundation 現(xiàn)在支持使用 HEVC 和 Alpha 通道編碼視頻同诫。以這種方式編碼的視頻在 AVFoundation API 和網(wǎng)頁中的 Safari 中得到廣泛支持粤策。格式的技術(shù)細節(jié)可以在互操作性配置文件規(guī)范中找到。

Core Image

?filterWithImageURL:options:filterWithImageData:options: 不再支持 RAW 5 及更早版本误窖。版本 6 及更高版本仍然受支持叮盘。

? 添加了用于實例化和修改內(nèi)置 Core Image過濾器的新 API秩贰。

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

? Metal CIKernel 實例支持具有任意結(jié)構(gòu)化數(shù)據(jù)的參數(shù)柔吼。

? Metal CIKernel實例支持返回一組2×2像素毒费。

?CIFormat符號的整數(shù)值(例如 kCIFormatARGB8)已更改為跨平臺一致性的新值集合。以前的值仍然支持向后兼容; 但是愈魏,您應(yīng)該避免對特定數(shù)值的依賴性觅玻。

Mail

? 現(xiàn)在可以在“設(shè)置”>“郵件”中啟用“忽略已阻止的發(fā)件人”。被阻止的聯(lián)系人列表與 Messages培漏,F(xiàn)aceTime 和 Phone 共享溪厘。

小結(jié)

從開發(fā)層面來講,iOS 13 最大的亮點無疑是引入了SwiftUI牌柄,這也是 WWDC 2019 的一大亮點畸悬。實際上 Release Note 也是大篇幅在講 SwiftUI 的內(nèi)容。由于 SwiftUI還處理優(yōu)化階段珊佣,變數(shù)還很多蹋宦,所以我們在此暫不說明,詳情可以查看 iOS 13 Release Note咒锻。

另外由于 Apple 在未發(fā)布 iOS 13 正式版時冷冗,就開始發(fā)布 iOS 13.1 beta 版,所以有些內(nèi)容可能已不適用惑艇。在 iOS 13.1 正式版出來后蒿辙,我們再細細來看。

本篇文章持續(xù)更新中, 歡迎一起討論.

大部分內(nèi)摘自此處
其他適配

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末敦捧,一起剝皮案震驚了整個濱河市须板,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌兢卵,老刑警劉巖习瑰,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異秽荤,居然都是意外死亡甜奄,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門窃款,熙熙樓的掌柜王于貴愁眉苦臉地迎上來课兄,“玉大人,你說我怎么就攤上這事晨继⊙滩” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蜒茄。 經(jīng)常有香客問我唉擂,道長,這世上最難降的妖魔是什么檀葛? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任玩祟,我火速辦了婚禮,結(jié)果婚禮上屿聋,老公的妹妹穿的比我還像新娘空扎。我一直安慰自己,他們只是感情好润讥,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布转锈。 她就那樣靜靜地躺著,像睡著了一般象对。 火紅的嫁衣襯著肌膚如雪黑忱。 梳的紋絲不亂的頭發(fā)上宴抚,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天勒魔,我揣著相機與錄音,去河邊找鬼菇曲。 笑死冠绢,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的常潮。 我是一名探鬼主播弟胀,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼喊式!你這毒婦竟也來了孵户?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤岔留,失蹤者是張志新(化名)和其女友劉穎夏哭,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體献联,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡竖配,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了里逆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片进胯。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖原押,靈堂內(nèi)的尸體忽然破棺而出胁镐,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布盯漂,位于F島的核電站烁巫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏宠能。R本人自食惡果不足惜亚隙,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望违崇。 院中可真熱鬧阿弃,春花似錦、人聲如沸羞延。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伴箩。三九已至入愧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嗤谚,已是汗流浹背棺蛛。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留巩步,地道東北人旁赊。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像椅野,于是被迫代替她去往敵國和親终畅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345