setNeedsDisplay、setNeedsLayout、layoutIfNeeded等

参考链接:https://sq.163yun.com/blog/article/200743376636538880
1、setNeedsDisplay或者setNeedsDisplay(rect: CGRect)

  • 标记相应的视图区域需要重绘
  • 调用之后不会立即重绘,而是在下一个绘制周期里绘制
  • 调用View的 draw(_ rect: CGRect)方法
  • 不会调用layoutSubviews()方法

2、setNeedsLayout

  • 不会立即更新界面,会在下一个刷新周期里更新
  • 需要在主线程调用此方法
  • 不管尺寸有没有更改都会会调用layoutSubviews()方法

3、layoutIfNeeded

  • 会立即更新视图
  • 使用自动布局的视图会默认更新改变的尺寸
  • 在动画里使用该属性
  • 有需要刷新的标记会立即调用,没有则不会调用

4、layoutSubviews调用时机

  • 初始化时设置frame不为Zero会触发
  • 直接调用[self setNeedsLayout]
  • addSubview时
  • 当view的size发送改变的时候,前提是frame的值前后发生了变化
  • 滑动UIScrollView的时候
  • 旋转屏幕 可能会触发
  • 更新视图的 constraint

总结:

  • 如果要立即刷新,先调用[view setNeedsLayout],标记为需要布局,然后调用[view layoutIfNeeded],实现布局

你可能感兴趣的:(setNeedsDisplay、setNeedsLayout、layoutIfNeeded等)