layoutIfNeeded& setNeedsLayout& layoutSubviews

有时候在代码中常用layoutIfNeeded& setNeedsLayout& layoutSubviews,然并不是很清楚两者之间有什么区别,在https://github.com/pro648/tips/blob/master/sources/setNeedsLayout%20VS%20layoutIfNeeded.md 中找到一个比较好的大神文章

setNeedsLayout:当需要调整UIView子视图布局时,需要在主线程调用该方法。该方法记录请求并立即返回(即异步执行),等待下一个更新周期更新视图。因此,可以将多个视图布局更新合并到一个update cycle,这样有助于提高性能。需要注意的是,我们无法知道下个update cycle在何时发生。

layoutIfNeeded:强制视图立即更新其布局,即同步执行。当使用Auto Layout时,布局引擎根据约束的变化更新视图的位置。该方法的接收者将作为根视图,布局时也将从视图树的根视图开始。如果没有待处理的布局更新,则此方法将直接退出,而不会修改布局,或调用任何与布局有关的方法。

// view需要立即重新布局。该布局更新会以动画形式呈现。
[self.view layoutIfNeeded];
// 标记view需要重新布局。视图会根据约束迅速变化,但不会有动画。
[self.view setNeedsLayout];

layoutSubviews
在iOS 5.1之后,layoutSubviews默认使用你设置的约束来确定子视图的大小和位置。
子类根据需要重写此方法,以执行更为精确的子视图布局。只有在子视图的autoresizing和约束不能满足布局要求时,才应该重写layoutSubviews。重写该方法时,可以直接设置子视图的frame。
不要直接调用layoutSubviews方法。如果要强制更新布局,使用setNeedsLayout方法;如果需要立即更新布局,调用layoutIfNeeded方法。
layoutSubviews就像重新绘制中的drawRect:。layoutSubviews用来布局,drawRect:用来绘制。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值