updateConstraints
在我的自定义键盘中,我添加了一个增加键盘高度的约束。这会导致子视图调整(也使用自动布局)到新的大小。当布局完成调整大小并且所有子视图都已定位时,我需要调用一个函数(以存储一些新元素的位置以供以后使用,并手动更新一些元素以响应此新布局)。当尺寸发生变化并且元素重新定位时,例如在旋转设备之后,需要再次触发此代码。我应该使用什么函数来运行该代码?
viewDidAppear
只调用一次,这还为时过早,因为当时键盘还没有调整大小。
updateViewConstraints
不起作用,因为尚未布置子视图以响应更新的约束。我尝试调用self.view.setNeedsLayout()
thenself.view.layoutIfNeeded()
以尝试在调用我的函数之前强制进行更新,但这并没有什么不同——它仍然在键盘完成子视图布局之前运行该函数。
我试过viewDidLayoutSubviews
了,虽然它是在视图解决后调用的,但问题是这个函数在键盘中滚动集合视图时被调用了一百万次。滚动时我不能调用那个函数,我只能在键盘大小改变并且视图就位后调用它一次。
我考虑过在viewDidAppear
延迟后调用它,然后也以轮换方法(例如viewWillTransitionToSize
在另一个延迟后)调用它,但这会非常脆弱。我可以增加延迟以使其不那么脆弱,但我想确保尽早调用此方法以确保尽快更新所有内容。