美文网首页
视图的刷新

视图的刷新

作者: MakeThatChange | 来源:发表于2016-09-18 10:36 被阅读33次

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

在视图第一次显示之前,标记总是“需要刷新”的,可以直接调用[view layoutIfNeeded]

reloadData

刷新 tableView

setNeedsLayout

-setNeedsLayout方法:标记为需要重新布局,异步调用layoutIfNeeded刷新布局,不立即刷新,但layoutSubviews一定会被调用

setNeedsLayout在receiver标上一个需要被重新布局的标记,在系统runloop的下一个周期自动调用layoutSubviews

layoutSubviews

-layoutSubviews方法:这个方法,默认没有做任何事情,需要子类进行重写

layoutSubviews对subviews重新布局

layoutSubviews方法调用先于drawRect

layoutSubviews在以下情况下会被调用:

1、init初始化不会触发layoutSubviews

但是是用initWithFrame进行初始化时,当rect的值不为CGRectZero时,也会触发

2、addSubview会触发layoutSubviews

3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化

4、滚动一个UIScrollView会触发layoutSubviews

5、旋转Screen会触发父UIView上的layoutSubviews事件

6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件

layoutSubviews,当我们在某个类的内部调整子视图位置时,需要调用。

反过来的意思就是说:如果你想要在外部设置subviews的位置,就不要重写

layoutIfNeeded

-layoutIfNeeded方法:如果,有需要刷新的标记,立即调用layoutSubviews进行布局(如果没有标记,不会调用layoutSubviews)

layoutIfNeeded方法如其名,UIKit会判断该receiver是否需要layout.根据Apple官方文档,layoutIfNeeded方法应该是这样的

layoutIfNeeded遍历的不是superview链,应该是subviews链

setNeedDisplay重绘

setNeedDisplay在receiver标上一个需要被重新绘图的标记,在下一个draw周期自动重绘,iphone device的刷新频率是60hz,也就是1/60秒后重绘

-drawRect:(CGRect)rect方法:重写此方法,执行重绘任务

-setNeedsDisplay方法:标记为需要重绘,异步调用drawRect

-setNeedsDisplayInRect:(CGRect)invalidRect方法:标记为需要局部重绘

drawRect是对receiver的重绘,能获得context

sizeToFit

sizeToFit会自动调用sizeThatFits方法;

sizeToFit不应该在子类中被重写,应该重写sizeThatFits

sizeThatFits传入的参数是receiver当前的size,返回一个适合的size

sizeToFit可以被手动直接调用

sizeToFit和sizeThatFits方法都没有递归,对subviews也不负责,只负责自己

相关文章

  • ReactNative 原生层渲染流程

    所谓 UI 渲染无非就是怎么创建视图,以后刷新视图的时候怎么刷新。 UIManager RCTRootView 在...

  • 视图的刷新

    如果要立即刷新,要先调用[view setNeedsLayout],把标记设为需要布局,然后马上调用[view l...

  • iOS刷新view方法小结

    视图刷新是常有的事情,数据的更新、视图的创建、添加、滚动、frame的改变,都更刷新相关,掌握刷新的窍门,能提高应...

  • Swift_下拉刷新

    视图偏移量 内边距 消息发送 代码layout布局 1. 负责刷新相关的逻辑处理 2.刷新视图 负责刷新相关UI显...

  • View的孪生兄弟—SurfaceView

    前言 View通过刷新来重绘视图,Android系统通过发送VSYNC信号来进行视图重绘,刷新的时间间隔为16ms...

  • iOS中Block+单利解决不相关联的界面通讯问题

    使用场景 A视图和B视图没有直接跳转关系,当A视图数据发生改变需要触发B视图的刷新事件,当A视图向B视图传递一些信...

  • Oracle物化视图没有刷新

    参考 为支持物化视图快速刷新,需要为物化视图用到的每一张表创建视图日志 创建物化视图 使用物化视图,提前将需要分组...

  • 父视图刷新子视图tableView

    在父视图里面点击按钮弹出一个子视图里面有一个tableView并打算在父视图是刷新子视图的tableView,但一...

  • 报告的刷新

    常见的刷新方式1.手动刷新2.打开文件自动刷新3.设置刷新频率4.设置刷新按钮第四种方式: 录制宏 视图 → 宏...

  • wkwebview开发札记

    H5页面上传会自动刷新视图解决方案:将视图渲染放在viewdidload

网友评论

      本文标题:视图的刷新

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