簡體   English   中英

iOS 布局在 Xcode 11 上的 iOS 13 上中斷 - 未調用 traitCollectionDidChange

[英]iOS layout breaks on iOS 13 on Xcode 11 - traitCollectionDidChange is not called

TL;DR 在 Xcode 11 上,iOS 13 的某些應用程序布局被破壞(下面的操作系統很好)。 當我 go 回到背景並返回時,它是固定的......除非 UIUserInterfaceStyle 設置為 Light (!)

我正在處理一個去年沒有開發過的舊應用程序。 我正在使用最新的 Xcode (11.2) 和 Swift 4。當然,當您使用新的 Xcode 版本時,我期待一些編譯問題,但一旦這些問題得到修復,我意識到:

該應用程序在 iOS 13 上不再正確布局,至少該應用程序的某些視圖。 雖然在 AppStore 布局上不是問題,所以我猜它是 iOS 13 + Xcode 11 (我在這里猜,我不知道使用哪個 ZA3B5EBD8A1E9EBF44A172E80D5AZ33 構建當前版本)。

更重要的一件事是,當應用程序進入后台時,應用程序突然能夠更新其約束,並且在回來后布局是固定的。 有一個例外,如果我在應用程序的 info.plist 上啟用 UIUserInterfaceStyle 以點亮,則布局永遠不會自行修復。

另一個奇怪的情況是,當您查看並彈出視圖時,它會正確布局(在預覽中,如果您使用該手勢完成輸入,也會在視圖中)。 如果在 peek & pop 之后您不輸入並稍后正常輸入,它仍然無法修復。

我不知道我是如何找到它的,但解決方案在 useyourloaf 的帖子上

顯然 iOS 13 現在能夠在加載視圖之前預測特征,因此加載視圖時不再調用traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?)

有時我們需要知道設備的大小來調整一些約束,我們指望這種方法在那里(改變時),但由於 iOS 已經檢測到它,特征是在加載之前設置的,並且永遠不會調用該方法。 因此,應該將那段邏輯移到其他地方(viewDidLoad、layoutSubviews、...)。

這為我修好了。 現在越來越多的事情開始變得有意義。 但是我不知道為什么設置燈光樣式會導致設備不會在后台觸發該方法。

資料來源:https://useyourloaf.com/blog/predicting-size-classes-in-ios-13/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM