viewWillAppear 和 viewWillLayoutSubviews 之间的子视图框架有何变化?

Posted

技术标签:

【中文标题】viewWillAppear 和 viewWillLayoutSubviews 之间的子视图框架有何变化?【英文标题】:What changes a subviews frame between viewWillAppear and viewWillLayoutSubviews? 【发布时间】:2012-10-15 13:23:12 【问题描述】:

这是一个非常简单的设置,日志让我感到困惑:

我有一个 UIViewController 子类。没什么特别的。它的视图有一个子视图。我想在变换上做一些动画来缩放视图。在调试过程中我发现了这个:

----- VIEWDIDLOAD <UIView: 0x9d77bc0; frame = (10 57; 300 206)...
----- VIEWWILLAPPEAR <UIView: 0x9d77bc0; frame = (10 57; 300 206)...
----- VIEWWILLLAYOUTSUBVIEWS <UIView: 0x9d77bc0; frame = (10 57; 460 206)...
----- VIEWDIDLAYOUTSUBVIEWS <UIView: 0x9d77bc0; frame = (10 57; 460 206)...
----- VIEWDIDAPPEAR <UIView: 0x9d77bc0; frame = (10 57; 460 206)...

此子视图的框架在-viewWillAppear 和-viewWillLayoutSubviews 的调用之间发生变化。我希望子视图的框架在 -viewWillLayoutSubviews 和 -viewDidLayoutSubviews 之间变化。

willAppear 和 willLayout 之间发生了什么?

Xcode 4.5.1、ios 6

【问题讨论】:

【参考方案1】:

我不知道确切的答案,但您应该能够通过子类化视图并实现 setFrame: 的覆盖来找出答案,该覆盖只调用其 super 中的那个。设置断点并查看调用堆栈。

【讨论】:

以上是关于viewWillAppear 和 viewWillLayoutSubviews 之间的子视图框架有何变化?的主要内容,如果未能解决你的问题,请参考以下文章

Controller生命周期

重写viewWillAppear 和 viewWillDisAppear时[super viewWillAppear] 和 [super viewWillDisappear]的调用位置

viewWillAppear 和 viewDidAppear 之间的操作?

appDelegate 设置 rootViewController 和 viewWillAppear 不被调用?

如何在自定义导航中添加 viewwillappear 和 viewdidappear 之间的延迟?

viewWillAppear 和 viewWillDisappear 之间的排序问题