美文网首页good
setNeedsDisplay、setNeedsLayout、l

setNeedsDisplay、setNeedsLayout、l

作者: 想做Reader和Coder | 来源:发表于2020-06-10 07:17 被阅读0次

    参考链接: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、l

        本文链接:https://www.haomeiwen.com/subject/cgtutktx.html