我在我的应用程序中发现了一个奇怪的行为,其中连接IBOutlet
在我的视图控制器中的调用之间有其连接的视图框架viewWillAppear:
and 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
方法,但如果内容在屏幕上之前我无法更改,那么这似乎毫无用处。可能发生什么情况?
来自文档: https://developer.apple.com/documentation/uikit/uiviewcontroller
viewWillAppear:
通知视图控制器其视图即将添加到视图层次结构中。
viewDidAppear:
通知视图控制器其视图已添加到视图层次结构中。
因此,子视图的框架尚未在viewWillAppear
:
适当的方法在视图呈现到屏幕上之前修改您的 UI is:
viewDidLayoutSubviews
通知视图控制器其视图刚刚布置了其子视图。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)