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看我就懂!_慕课手记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值