这里是一个测试,我只使用自动布局,我只使用自定义子类的子视图。我在子类的初始化所有的汽车布局:
这是一个“登录按钮”有没有框架,但随后与自动布局设置:
-(void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
if (self.contentView.loginButton.frame.size.height) {
NSLog(@"viewDidLayoutSubviews");
}
}
-(void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
if (self.contentView.loginButton.frame.size.height) {
NSLog(@"viewWillLayoutSubviews");
}
}
-(void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
}
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if (self.contentView.loginButton.frame.size.height) {
NSLog(@"didAppear");
}
}
-(void)viewWillAppear:(BOOL)animated {
if (self.contentView.loginButton.frame.size.height) {
NSLog(@"viewWillAppear");
}
}
-(void)viewDidLoad {
[super viewDidLoad];
if (self.contentView.loginButton.frame.size.height) {
NSLog(@"viewDidLoad");
}
}
这里的输出。所以,这意味着,我认为终于有一个帧时的
2015年8月25日01:28:27.789 [67502:1183631] viewDidLayoutSubviews
2015年8月25日01:28:27.790 [ 67502:1183631] viewWillLayoutSubviews
2015年8月25日01:28:27.790 [67502:1183631] viewDidLayoutSubviews
2015年8月25日01:28:28.007 [67502:1183631] didAppear
这意味着第一次登录按钮有一个框架在viewDidLayoutSubviews中,这看起来很奇怪,因为这是主视图子视图的第一遍。 ViewWillAppear中没有框架,尽管viewcontroller本身的视图已经设置在登录按钮之前。当viewcontroler的视图被设置时,整个UIView子类的主视图也被设置,这也发生在登录按钮之前。因此,视图的子视图是在父视图设置后设置的。
重点是这样的:如果你在viewDidLayoutSubviews中放置了imageview信息拉,那么你就有一个框架可以使用,除非你通过类型转换将这个UIImageView框架设置为ViewController的视图,那么你将拥有UIImageView的框架在viewDidLoad中设置。祝你好运!
那么酷和东西,但'UIView'!='UIViewController' – Laszlo