使用Autolayout, 如何获取视图的frame

一般可以在UIViewController里的viewDidLayoutSubviews方法里面空间frame.
通常这个方法会被多次调用, 直到布局完成, 然后在调用viewDidAppear.

大概在ViewController上面嵌套了3到4个view, 而这些view在viewDidLayoutSubviews完成之后, frame仍然不是正确值. 花了一个上午查找原因和解决方案.

我的解决方案:viewDidLayoutSubviews里面对子视图强制更新布局. 这样subview上面的控件也会开始布局.

func viewDidLayoutSubviews{
      ...
      self.subView.setNeedsLayout()
      self.subView.layoutIfNeeded()
}

setNeedsLayout
标记为需要重新布局,不立即刷新,但layoutSubviews一定会被调用
配合layoutIfNeeded立即更新

layoutIfNeeded
如果,有需要刷新的标记,立即调用layoutSubviews进行布局

你可能感兴趣的:(使用Autolayout, 如何获取视图的frame)