我在我的应用程序中发现了一个奇怪的行为,其中连接的 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 进行设置,但如果内容在屏幕上之前无法更改,那似乎毫无用处。会发生什么?
最佳答案
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/