layoutSubviews 调用时机

简介: layoutSubviews 调用时机

声明.剽窃自谷歌,看后瞬间理解深刻加深了原文地址

layoutSubviews 调用时机

一般baidu出来的答案如下,然而说明并不够透彻,在此补充说明:

1、init初始化不会触发layoutSubviews

2、addSubview会触发layoutSubviews

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

4、滚动一个UIScrollView会触发layoutSubviews

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

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

首先:layoutSubviews 字面意思是: 布局子控件,也就是说改变子控件会调用父类该方法;

1、init初始化不会触发layoutSubviews,

这点确实不会调用;

2、addSubview会触发layoutSubviews,

如果添加的子控件没有Frame,不会调用;

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

还有一个前提是该View 已经被添加到父控件, 此时View和其父控件的layoutSubviews都会调用;

也就包含了6 的情况

4、滚动一个UIScrollView会触发layoutSubviews ,因滚动UIScrollView,其子控件肯定对应会刷新,也就肯定会被调用;

这点会调用;

5、旋转Screen会触发控制器对应UIView上的layoutSubviews事件

做一点更正;

总结:改变子控件就会调用父类的方法;

参考文档这样说:

大概意思是:如果子控件的布局无法满足需求,需要对子控件更改布局时可以重写layoutSubviews 直接改变之空间的Frame; 如果需要强制更新子控件的布局, 不能直接调用layoutSubviews,应该调用setNeedsLayout;

Subclasses can override this method as needed to perform more precise layout of their subviews. You should override this method only if the autoresizing and constraint-based behaviors of the subviews do not offer the behavior you want. You can use your implementation to set the frame rectangles of your subviews directly.

You should not call this method directly. If you want to force a layout update, call thesetNeedsLayoutmethod instead to do so prior to the next drawing update. If you want to update the layout of your views immediately, call thelayoutIfNeededmethod.


逻辑教育视频合集:

链接:https://pan.baidu.com/s/1kqiOB09jXG4aGXFXWKguZw 提取码:j9Zq

如果被和谐联系:2395660048


相关文章
|
6月前
ContentProvider的执行时机
ContentProvider的执行时机
32 0
|
7月前
|
前端开发 API
异步装载回调操作
异步装载回调操作
|
Java 编译器
04-面试:类的初始化做了什么?初始化的时机是?
类的初始化是指在首次使用类时,JVM对类进行的初始化操作。在类初始化阶段,JVM会执行一系列的步骤。
81 0
04-面试:类的初始化做了什么?初始化的时机是?
|
SQL Java
PicassoProvider初始化时机
在学习Picasso源码的过程中,发现了Picasso对象的初始化不需要传入上下文对象了
让某一个请求先执行(时机问题)
让某一个请求先执行(时机问题)
【EventBus】EventBus 源码解析 ( 事件发送 | 发布线程为 子线程 切换到 主线程 执行订阅方法的过程分析 )
【EventBus】EventBus 源码解析 ( 事件发送 | 发布线程为 子线程 切换到 主线程 执行订阅方法的过程分析 )
166 0
|
C# UED
艾伟_转载:C# 委托的同步调用和异步调用
  委托的Invoke方法用来进行同步调用。同步调用也可以叫阻塞调用,它将阻塞当前线程,然后执行调用,调用完毕后再继续向下进行。   同步调用的例子: using System;using System.
926 0
|
Java Android开发 索引
onAttachedToWindow和onDetachedFromWindow调用时机源码解析
终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~ 先上测试代码: MyView.java import android.
1690 0
|
Android开发
Android应用开发—setResult()的调用时机
本文转载自setResult()的调用时机,此处做了重新的排版,只是感觉markdown的排版比较好看些,侵删。 今天遇到这样一个问题,我在Activity-A中用startActivityForResult()方法启动了Activity-B,并且在B中通过setResult()方法给A返回值,由于某些原因不能在setResult()之后立刻调用finish()函数,只能通过用户按Back键自己退出到A。
1669 0

热门文章

最新文章