当我的主视图旋转时,我想重新排列子视图,所以在我的ViewController中,我重写
willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration
并在那里设置子视图的帧。这一切都很好,但在subViews中我也覆盖了
layoutSubviews
所以他们正确布局。但问题是这个现在被调用两次 - 大概一次我在willAnimateRotationToInterfaceOrientation中设置Frame而一次因为旋转而设置。 (如果我没有设置框架,它会被调用一次。)
当然,ViewController负责布局框架,这看起来像是一个设计缺陷 - 什么是解决方案,所以layoutSubviews只调用一次?
答案 0 :(得分:19)
我有同样的问题。我发现this page对我有帮助。这对你有用吗?
编辑: 以下是页面摘要(已复制):
- init不会导致调用layoutSubviews(duh)
- addSubview导致在要添加的视图,要添加到的视图(目标视图)以及目标视图的所有子视图上调用layoutSubviews
- 只有当框架的尺寸参数不同时,
- setFrame才会智能地调用仅具有框架设置的视图上的layoutSubviews
- 滚动UIScrollView会导致在scrollView上调用layoutSubviews,并且它是superview
- 旋转设备只在父视图上调用layoutSubview(响应的viewControllers主视图)
- removeFromSuperview - layoutSubviews仅在superview上调用(不在表格中显示)