View的布局详解(三种方法)

View的布局无非就是其在屏幕上的大小与位置,其中UIView有三个重要的布局属性:frame,bounds,center。UIView提供了用来通知系统某个view布局发生变化的方法,也提供了在view布局重新计算后调用的可重写的方法。

1.layoutSubviews()方法

当一个视图“认为”应该重新布局自己的子控件时,它便会自动调用自己的layoutSubviews方法,在该方法中“刷新”子控件的布局。而且这个方法不需要我们手动去调用,而是系统在以下情况自动调用:

  • 直接修改 view 的大小时会触发
  • 调用addSubview会触发子视图的layoutSubviews
  • 用户在 UIScrollView 上滚动(layoutSubviews 会在UIScrollView和它的父view上被调用)
  • 用户旋转设备
  • 更新视图的 constraints 这些方式都会告知系统view的位置需要被重新计算,继而会调用layoutSubviews.当然也可以直接触发layoutSubviews的方法。

2.layouifNeeded()方法

当你“马上”,“立刻”需要刷新布局的时候调用,这时候会立刻调用layoutSubviews()方法,将打了“标记”的视图立刻更新。但是这方法会很消耗性能效率

3.setNeedsLayout()方法

使用setNeedsLayout()方法,不会立刻更新布局,而是在下一个run loop中将带有“标记”的视图更新,此时调用layoutSubviews()方法,这有利于优化性能,并且这个时间间隔并不会长到影响用户体验。

参考:

浅谈UIView的刷新与绘制 - 掘金

setNeedsLayout和layoutIfNeeded看我就懂!_慕课手记

你可能感兴趣的:(swift,ios,开发语言,swift)