【发布时间】:2013-01-29 21:25:39
【问题描述】:
当我的主视图旋转时,我想重新排列子视图,所以在我的 ViewController 中,我覆盖了
willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration
并在那里设置子视图的框架。这一切都很好,但是在子视图中我也覆盖了
layoutSubviews
所以他们自己布局正确。但问题是这现在被调用了两次——大概一次是当我在 willAnimateRotationToInterfaceOrientation 中设置 Frame 时,一次是因为旋转。 (如果我不设置 Frame,它会被调用一次。)
当然,布局框架是 ViewController 的责任,所以这似乎是一个设计缺陷 - 解决方案是什么,所以 layoutSubviews 只被调用一次?
【问题讨论】:
-
您可以将最后一个方向保存在一个私有变量中,并且只有在 lastOrientation != currentOrientation 并且在执行 layoutSubviews 代码之后才执行 layoutSubviews 代码,设置 lastOrientation = currentOrientation,这样它只会被调用一次单一方向
-
是的,我确实想到了这一点,但似乎有点笨拙。如果我确实想在旋转以外的其他时间更改框架怎么办 - 那么 layoutSubviews 不会做任何事情!必须有更好的方法 - 这应该如何干净地完成?
-
-layoutSubviews被调用两次有问题吗? -
嗯,这不是世界末日,但它效率低下,如果这是预期的设计,我会感到惊讶,所以让我觉得我错过了一些东西
标签: ios rotation viewcontroller layoutsubviews