iphone - viewWillAppear : and viewDidAppear: 之间的 View 框架变化

标签 iphone ios objective-c uiscrollview

我在我的应用程序中发现了一个奇怪的行为,其中连接的 IBOutlet 在我的 View Controller 中对 viewWillAppear: 的调用之间具有其连接的 View 框架viewDidAppear:。这是我的 UIViewController 子类中的相关代码:

-(void)viewWillAppear:(BOOL)animated {
    NSLog(@"%@", self.scrollView);
}

-(void)viewDidAppear:(BOOL)animated {
    NSLog(@"%@", self.scrollView);
}

以及生成的日志输出:

MyApp[61880:c07] <UIScrollView: 0x1057eff0; frame = (0 0; 0 0); clipsToBounds = YES; autoresize = TM+BM; gestureRecognizers = <NSArray: 0x10580100>; layer = <CALayer: 0x1057f210>; contentOffset: {0, 0}>
MyApp[61880:c07] <UIScrollView: 0x1057eff0; frame = (0 44; 320 416); clipsToBounds = YES; autoresize = TM+BM; gestureRecognizers = <NSArray: 0x10580100>; layer = <CALayer: 0x1057f210>; contentOffset: {0, 0}>

这清楚地表明框架在两次调用之间发生了变化。我想在 viewDidLoad 方法中对 View 进行设置,但如果内容在屏幕上之前无法更改,那似乎毫无用处。会发生什么?

最佳答案

来自documentation:

viewWillAppear:

通知 View Controller 其 View 即将添加到 View 层次结构中。

viewDidAppear:

通知 View Controller 其 View 已添加到 View 层次结构中。

因此, subview 的框架尚未在 viewWillAppear 中设置:

在 View 呈现到屏幕之前修改 UI 的适当方法是:

viewDidLayoutSubviews

通知 View Controller 它的 View 刚刚布置了它的 subview 。

关于iphone - viewWillAppear : and viewDidAppear: 之间的 View 框架变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17637523/

相关文章:

ios - Xamarin 表单电话无法在 iOS 上运行

ios - 如何在 iPhone 上动态创建彩色 1x1 UIImage?

ios - 从相机方法调用 unwind segue 失败

iphone - 动画 UIView 比例为零

iphone - 为什么 iPhone 没有 NSArrayController?

iphone - 用于简单 iPhone 游戏的核心动画或 OpenGL

ios - 无法加载4S拍摄的图像,但可以加载5S

iPhone - 带有 html 内容的 UITextView?

ios - 如何向 UITableViewCell 中的 4 个标签添加约束

objective-c - 如何从 XML 元素获取属性