有谁知道为什么当设备旋转到纵向模式时,UITextView.layoutSubviews()没有被调用?
当旋转到横向模式时,这些都会被调用。
但是当旋转回纵向时,调用了UILabel.layoutSubviews(),但没有调用UITextView.layoutSubviews。这是在一个空项目中,除了这些方法中的痕迹,没有其他代码。
layoutSubviews
通常在以下情况下被调用 setNeedsLayout()
在之前调用运行循环时已经被调用。
如果布局系统认为不需要调用它,它将不会被调用。
理想情况下,你不应该重写这个函数。你应该只调用 setNeedsLayout()
在做出 superview
变化,让布局系统调用这个函数的默认实现。更重要的是,你应该在auto-layout里面定义你的子视图布局需求,这样它就能从那里获得正确的值。
如果你想立即更新,你应该调用 layoutIfNeeded()
.
这是因为这是UIKit框架任意调用的方法之一,它可能不适合你的布局需求。
这里有2个独立的东西。
layoutSubviews()
. 即何时何地使用它。UITextView
在设备旋转时。关于 layoutSubviews()
你不应该把任何逻辑放在这里,因为你的观点是没有任何子观点的。
你可以说我们 期待 iOS来调用,所以我们可以把一些实现放在这里,但这又不是正确的方式。layoutSubviews()
并不是要改变视图本身,只是布置子视图。
我建议大家多看一些关于 layoutSubviews()
. 我学到了 此处,当我开始学习iOS的时候。
现在要实现你想做的事情,即在设备旋转时做一些事情,你的正确方法是使用 viewWillTransition(to:with:)
方式 UIViewController
.
在这种方法中,你可以把逻辑来做一些事情。甫 的过渡将发生。
你也可以把逻辑放在执行 过渡期 或 过渡期后,使用 UIViewControllerTransitionCoordinator
传给 viewWillTransition(to:with:)
希望对大家有所帮助!