layoutSubviews在旋转时调用两次

Bbx*_*Bbx 6 rotation viewcontroller ios layoutsubviews

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

willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration
Run Code Online (Sandbox Code Playgroud)

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

 layoutSubviews
Run Code Online (Sandbox Code Playgroud)

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

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

Arm*_*min 19

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

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

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