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


相关文章
|
3月前
|
存储 前端开发 rax
函数过程的调用
函数过程的调用
|
5月前
ContentProvider的执行时机
ContentProvider的执行时机
28 0
|
6月前
|
C语言 C++ 容器
C调用C++代码
C调用C++代码
36 1
|
Java 编译器
04-面试:类的初始化做了什么?初始化的时机是?
类的初始化是指在首次使用类时,JVM对类进行的初始化操作。在类初始化阶段,JVM会执行一系列的步骤。
79 0
04-面试:类的初始化做了什么?初始化的时机是?
|
SQL Java
PicassoProvider初始化时机
在学习Picasso源码的过程中,发现了Picasso对象的初始化不需要传入上下文对象了
让某一个请求先执行(时机问题)
让某一个请求先执行(时机问题)
|
缓存 负载均衡 微服务
多服务间的调用
上文我们把我们项目注册到服务器上了,但是在微服务中,我们会有多个服务,同时也会使用A服务调用B服务的接口。springcloud netflix这里有两种方式ribbon和feign,我们分别介绍。
115 0
多服务间的调用
|
C++
c调用c++函数
c调用c++普通函数     cpp_test/cpp.h #ifndef CPP_H #define CPP_H #include "extern_cpp.h" int add(int a, int b); char add(char a, char b); #endif // CPP_H     cpp_test/extern_cpp.
2020 0
|
存储 安全 Java
类加载时机与过程 asdfsadfasdfsa 09-19 268
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/79612719  通过之前的介绍可知,类加载过程共有5个步骤,分别是:加载、验证、准备、解析、初始化。
1207 0