viewDidLayoutSubviews 与 layoutSubviews 调用顺序

了解演示demo的UI布局:

(lldb) po [[self view] recursiveDescription]

<UIView: 0x8d8f070; frame = (0 0; 320 480); autoresize = W+H; layer = <CALayer: 0x8d8f490>>

| <ZQCustomView: 0x8c61130; frame = (0 0; 0 0); layer = <CALayer: 0x8c61220>>

|    | <UIButton: 0x8f55530; frame = (100 100; 50 50); opaque = NO; layer = <CALayer: 0x8f59320>>

|    |    | <UIButtonLabel: 0x8f594e0; frame = (9 16; 32 18); text = ‘ GO ‘; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x8f595d0>>

也即是:self.view 上添加个自定义的customView

打印调用的顺序:

TestFunctionCall[49445:60b] ---> -[ZQRootViewController viewDidLoad]

TestFunctionCall[49445:60b] ---> -[ZQCustomView initWithFrame:]

TestFunctionCall[49445:60b] ---> -[ZQRootViewController viewWillLayoutSubviews]

TestFunctionCall[49445:60b] ---> -[ZQRootViewController viewDidLayoutSubviews]

TestFunctionCall[49445:60b] ---> -[ZQCustomView layoutSubviews]

TestFunctionCall[49445:60b] ---> -[ZQCustomView layoutSubviews]

TestFunctionCall[49445:60b] ---> -[ZQCustomView drawRect:]

先调用试图控制器的viewWillLayoutSubviews 以及viewDidLayoutSubviews,然后调用view的layoutSubviews、layoutSubviews
。最后调用drawRect

时间: 2024-11-04 12:20:35

viewDidLayoutSubviews 与 layoutSubviews 调用顺序的相关文章

iOS APP启动时所有方法的调用顺序分析

一个应用程序的启动过程要包括代理的创建,控制器的加载和控制器view的加载,这其中有很多关于生命周期的方法,每个方法都是有先后顺序的,如果调用顺序拿不准,或者某段代码写的方法不恰当,就会遇到各种奇葩问题.本文不怕麻烦的在几乎所有启动时要调用的方法里都用了 __FUNCTION__ 打印.结果还有有些地方出人意料的 首先回顾一下应用程序的启动过程 ①.先加载Main函数 ②.在Main函数里的 UIApplicationMain方法中,创建Application对象 创建Application的D

对应用程序启动时所有方法的调用顺序分析

一个应用程序的启动过程要包括代理的创建,控制器的加载和控制器view的加载,这其中有很多关于生命周期的方法,每个方法都是有先后顺序的,如果调用顺序拿不准,或者某段代码写的方法不恰当,就会遇到各种奇葩问题.本文不怕麻烦的在几乎所有启动时要调用的方法里都用了 __FUNCTION__ 打印.结果还有有些地方出人意料的 如果你不是在董铂然博客园看到本文,请点击查看原文 首先回顾一下应用程序的启动过程 ①.先加载Main函数 ②.在Main函数里的 UIApplicationMain方法中,创建Appl

转:UIViewController中各方法调用顺序及功能详解

UIViewController中loadView, viewDidLoad, viewWillUnload, viewDidUnload, viewWillAppear, viewDidAppear, viewWillLayoutSubviews,viewDidLayoutSubviews,viewWillDisappear, viewDidDisappear方法,按照调用顺序说明如下: 调试日志: 1 2 3 4 5 6 7 8 9 2013-07-14 12:15:49.048 VCTes

UIViewController中各方法调用顺序及功能详解

UIViewController中loadView, viewDidLoad, viewWillUnload, viewDidUnload, viewWillAppear, viewDidAppear, viewWillLayoutSubviews,viewDidLayoutSubviews,viewWillDisappear, viewDidDisappear方法,按照调用顺序说明如下: 调试日志: 1 2 3 4 5 6 7 8 9 2013-07-14 12:15:49.048 VCTes

(转)UIViewController中各方法调用顺序及功能详解

目录(?)[-] 1 initWithNibNamebundle 2 loadView 3 viewDidLoad 4 viewWillAppear 5 viewDidAppear 6 viewWillLayoutSubviews 7 viewDidLayoutSubviews 8 viewWillDisappear 9 viewDidDisappear 10 viewWillUnload 11 viewDidUnload UIViewController中loadView, viewDidLo

async 与 await 线程调用顺序

用async做一个多线程下载并在datagridview中即时更新,运行时在达到4个线程同时下载时界面卡顿,多次尝试后是不知道async与await线程调用顺序造成. 进入async方法后在调用await之前代码都在主线程(调用线程)中运行,调用await时及之后的async方法代码将另起线程运行该部分代码,而主线程在遇到await后回到主线程继续执行async后的代码. 将async方法通过声明委托后用begininvoke调用后解决.

讨论printf和cout的参数调用顺序

这里纠正在网络上看到的几个错误,以下给出正确的观点: (1)printf和cout都是有缓冲机制的.(有人认为printf是没有缓冲区的) (2)printf和cout函数对参数的调用顺序在c/c++中是未定义的.(有人认为它们读入的顺序是由右向左,输出顺序是由左到右,类似于栈) 基于以上错误的认识,看下列程序,有人会得到错误的输出的结果. #include <stdio.h> #include <iostream> using namespace std; int main()

c++学习笔记5,多重继承中派生类的构造函数与析构函数的调用顺序(二)

现在来测试一下在多重继承,虚继承,MI继承中虚继承中构造函数的调用情况. 先来测试一些普通的多重继承.其实这个是显而易见的. 测试代码: //测试多重继承中派生类的构造函数的调用顺序何时调用 //Fedora20 gcc version=4.8.2 #include <iostream> using namespace std; class base { public: base() { cout<<"base created!"<<endl; }

Activity生命周期方法的调用顺序工程与测试日志

下面为测试activity的方法的执行顺序   工程与测试资源地址 android工程 AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.finalizetest"