layoutSubviews在旋转时调用两次

时间:2013-01-29 21:25:39

标签: ios rotation viewcontroller layoutsubviews

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

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

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

 layoutSubviews

所以他们正确布局。但问题是这个现在被调用两次 - 大概一次我在willAnimateRotationToInterfaceOrientation中设置Frame而一次因为旋转而设置。 (如果我没有设置框架,它会被调用一次。)

当然,ViewController负责布局框架,这看起来像是一个设计缺陷 - 什么是解决方案,所以layoutSubviews只调用一次?

1 个答案:

答案 0 :(得分:19)

我有同样的问题。我发现this page对我有帮助。这对你有用吗?

编辑: 以下是页面摘要(已复制):

  
      
  • init不会导致调用layoutSubviews(duh)
  •   
  • addSubview导致在要添加的视图,要添加到的视图(目标视图)以及目标视图的所有子视图上调用layoutSubviews
  •   
  • 只有当框架的尺寸参数不同时,
  • setFrame才会智能地调用仅具有框架设置的视图上的layoutSubviews
  •   
  • 滚动UIScrollView会导致在scrollView上调用layoutSubviews,并且它是superview
  •   
  • 旋转设备只在父视图上调用layoutSubview(响应的viewControllers主视图)
  •   
  • removeFromSuperview - layoutSubviews仅在superview上调用(不在表格中显示)
  •