setNeedsLayout
setNeedsLayout:告知页面需要更新,但是不会立即开始更新.执行后立即调用layoutsubviews;
layoutIfNeeded
layoutIfNeeded:告知页面需要立即更新,所以一般会和setNeededLayout配合使用.如果希望立即生成新的frame需要调用此方法,利用这点一般布局动画可以使用这个方法是动画生效.
layoutsubviews
layoutsubviews:系统重写布局
setNeedsUpdateConstraints
setNeedsUpdateConstraints:告知需要更新约束,但是不会立刻开始
updateConstraintsIfNeeded
updateConstraintsIfNeeded:告知立刻更新约束
updateConstraints
updateConstraints:系统更新约束
那么了解完第一第二个方法之后我们的问题就很顺利的解决了,当使用autolayout布局时如果需要取得某个控件的frame,我们只需要用该控件的对象调用setNeedsLayout和layoutIfNeeded方法然后实现layoutsubviews或者viewDidLayoutSubviews(当控件直接写在controller里时)方法即可!
网友评论