6

当我的主视图旋转时,我想重新排列子视图,所以在我的 ViewController 中,我覆盖

willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration

并在那里设置子视图的框架。这一切都很好,但是在子视图中我也覆盖了

 layoutSubviews

所以他们正确地布局自己。但问题是这现在被调用了两次——大概一次是当我在 willAnimateRotationToInterfaceOrientation 中设置 Frame 时,一次是因为旋转。(如果我不设置 Frame 它会被调用一次。)

当然,布局框架是 ViewController 的责任,所以这似乎是一个设计缺陷——解决方案是什么,所以 layoutSubviews 只被调用一次?

4

1 回答 1

19

我有同样的问题。我发现这个页面对我很有帮助。这对你有用吗?

编辑:这是页面的摘要(复制):

  • init 不会导致 layoutSubviews 被调用(duh)
  • addSubview 导致 layoutSubviews 在被添加的视图、它被添加到的视图(目标视图)以及目标视图的所有子视图上调用
  • 仅当框架的大小参数不同时,setFrame 才智能地在设置了框架的视图上调用 layoutSubviews
  • 滚动 UIScrollView 会导致在 scrollView 上调用 layoutSubviews,它是 superview
  • 旋转设备仅在父视图(响应的 viewControllers 主视图)上调用 layoutSubview
  • removeFromSuperview – layoutSubviews 仅在 superview 上调用(不显示在表格中)
于 2013-03-10T17:43:28.287 回答