iOS開發(fā):關于iOS13適配的那些事

前言

iOS13出來有一段時間了,之前一直也沒有適配。最近公司要開發(fā)新的項目,要去要適配最新的系統(tǒng)和功能,所以就翻看文檔,把自己遇到的問題和解決的方法羅列出來,供大家參考。

1:新增管理項目聲明周期的文件SceneDelegate

Xcode11.0以上的開發(fā)工具創(chuàng)建的項目中,都包含SceneDelegate.h/.m文件,進去一看,里面包含的是項目的生命周期的方法和聲明一個屬性:@property (strong, nonatomic) UIWindow * window。然后進到AppDelegate文件中發(fā)現(xiàn)里面的沒有了生命周期的方法和UIWindow屬性的聲明。

根據(jù)蘋果文檔的說明,iOS13.0以上的系統(tǒng),聲明周期的方法和UIWindow屬性的聲明被移入到SceneDelegate文件中統(tǒng)一管理。如果大家目前不想使用SceneDelegate文件管理聲明周期,可以按照下面方法刪除即可:

在Info.plist文件中,刪除?Application Scene Manifest

刪除?Application Scene Manifest

然后在AppDelegate文件中,補全聲明周期的方法和聲明UIWindow屬性即可。


2:UITextField的placeholder私有屬性被廢棄

在iOS13.0的情況下運行項目,UITextField突然報了這個錯:找不到對應的key?_placeholderLabel.textColor.

報錯提示

查看了蘋果的資料得知,iOS13.0以后,蘋果禁止UITextField使用的私有屬性修改占位符的顏色及其文字大小,可以使用attributedPlaceholder富文本屬性修改。

已iOS13.0系統(tǒng)為分界面,加判斷區(qū)分一下即可:

解決方案


3:導航控制器模態(tài)彈出時,控制器界面不能完全鋪滿整個屏幕

先看一下iOS13.0系統(tǒng)下模態(tài)彈出的三種情況

iOS13.0系統(tǒng)下模態(tài)彈出的三種情況

其中,左邊圖片是iOS13.0系統(tǒng)下,默認彈出的樣式,后面?zhèn)z種情況,根據(jù)需要,做了修改。

模態(tài)彈出一共有一下幾種情況:

模態(tài)彈出的枚舉

iOS13.0及其以后,增加一個枚舉:UIModalPresentationAutomatic,官方解釋如下:

?Defines the presentation style that will be used for this view controller when it is presented modally. Set this property on the view controller to be presented, not the presenter.

?If this property has been set to UIModalPresentationAutomatic, reading it will always return a concrete presentation style. By default UIViewController resolves UIModalPresentationAutomatic to UIModalPresentationPageSheet, but system-provided subclasses may resolve UIModalPresentationAutomatic to other concrete presentation styles. Participation in the resolution of UIModalPresentationAutomatic is reserved for system-provided view controllers.

?Defaults to UIModalPresentationAutomatic on iOS starting in iOS 13.0, and UIModalPresentationFullScreen on previous versions. Defaults to UIModalPresentationFullScreen on all other platforms.

定義以模態(tài)顯示時將用于此視圖控制器的顯示樣式。在要顯示的視圖控制器(而不是演示者)上設置此屬性。

?如果將此屬性設置為UIModalPresentationAutomatic,則讀取該屬性將始終返回具體的呈現(xiàn)樣式。默認情況下,UIViewController將UIModalPresentationAutomatic解析為UIModalPresentationPageSheet,但是系統(tǒng)提供的子類可以將UIModalPresentationAutomatic解析為其他具體的呈現(xiàn)樣式。保留UIModalPresentationAutomatic的分辨率供系統(tǒng)提供的視圖控制器使用。

?從iOS 13.0開始,在iOS上默認為UIModalPresentationAutomatic,在以前的版本上默認為UIModalPresentationFullScreen。在所有其他平臺上,默認為UIModalPresentationFullScreen。

在iOS13.0系統(tǒng)下,模態(tài)彈出如圖片上左邊所示,猛地感覺很不適應,不是所需要的,筆者稍作修改,可以實現(xiàn)需求?,F(xiàn)羅列出來,供大家參考:

模態(tài)彈出的代碼實現(xiàn)


未完待續(xù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容