一般可以在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进行布局
网友评论