iOS布局在Xcode 11上的iOS 13上中断-不调用traitCollectionDidChange

Xp 11上的

TL; DR在iOS 13上 some 应用程序的布局已损坏(bellow OS很好)。当我回到背景并返回时,它是固定的...除非uiuserinterfacestyle设置为Light(!)

我正在处理去年未使用过的某种老版本应用程序。我正在使用最新的Xcode(11.2)和Swift4。当然,当您使用新的Xcode版本时,我期望遇到一些编译问题,但是一旦修复这些问题,我就会意识到:

该应用在iOS 13上的布局不再正确,至少是该应用的某些视图。不过,在AppStore上的布局不是问题,因此我猜想它与iOS 13 + Xcode 11有关(我在这里猜测,我不知道用于构建当前应用程序的是哪个Xcode版本)。

另一重要的事情是,当应用程序进入后台时,突然间,该应用程序能够更新其约束,并且在返回布局后得以修复。有一个例外,如果我在应用程序的info.plist上将uiuserinterfacestyle启用为Light,则布局永远不会被自己固定。

另一种奇怪的情况是,当您窥视并弹出视图时,它会正确布局(在预览中,如果您使用该手势完成输入,则在视图上也是如此)。如果在查看和弹出后您不输入并且以后又正常输入,则仍无法解决。

wzy8352663 回答:iOS布局在Xcode 11上的iOS 13上中断-不调用traitCollectionDidChange

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

显然,iOS 13现在能够在加载视图之前预测特征,因此traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?)在加载视图时不再被调用!

有时候,我们需要知道设备的大小以调整一些约束,我们依靠此方法在更改时在那里进行操作,但是由于iOS已检测到它,因此特征在加载之前已设置,并且该方法永远不会叫。因此,该逻辑应该移到其他地方(viewDidLoad,layoutSubviews等)。

这为我解决了。现在,越来越多的事情开始变得有意义了。我不知道为什么设置灯光样式会导致设备在后台不触发该方法。

来源:https://useyourloaf.com/blog/predicting-size-classes-in-ios-13/

本文链接:https://www.f2er.com/3066704.html

大家都在问