在我的自定义键盘中,我在updateConstraints
中添加了一个约束,该约束增加了键盘的高度。 这将导致子视图调整(也使用“自动布局”)为新大小。 当布局完成调整其大小并且所有子视图都已定位后,我需要调用一个函数(以存储稍后要使用的一些新元素的位置,并响应此新布局手动更新某些元素)。 当尺寸改变并且元素重新定位时,例如在旋转设备之后,需要再次触发该代码。 我应该使用什么功能来运行该代码?
viewDidAppear
仅被调用一次,这还为时过早,因为当时键盘的大小尚未调整。
updateViewConstraints
不起作用,因为尚未针对更新的约束updateViewConstraints
视图进行布局。 我试着打电话self.view.setNeedsLayout()
然后self.view.layoutIfNeeded()
企图迫使更新打电话给我的函数之前进行,但这并没有发挥作用-它仍然运行功能键盘完成之前布置子视图。
我尝试过viewDidLayoutSubviews
,虽然它在视图建立之后被调用,但问题是在键盘上滚动集合视图时,该函数被调用了百万次。 滚动时无法调用该函数,只能在键盘大小改变并且视图固定到位后一次调用它。
我考虑过在延迟后在viewDidAppear
调用它,然后又在另一个延迟后在诸如viewWillTransitionToSize
的旋转方法中调用它,但这将非常脆弱。 我可以增加延迟以减少它的脆弱性,但我想确保尽早调用此方法,以确保尽快更新所有内容。