为啥在 viewDidLoad 中添加子视图不起作用
Posted
技术标签:
【中文标题】为啥在 viewDidLoad 中添加子视图不起作用【英文标题】:Why does adding subview in viewDidLoad doesn't work为什么在 viewDidLoad 中添加子视图不起作用 【发布时间】:2014-05-17 11:04:08 【问题描述】:我试图将 UIToolBar 添加到 UIWebView 中,但是每当我在 viewDidLoad 中插入此代码时,UIToolBar 都不会显示,但是当在 viewWillAppear 中完成此操作时,它可以工作。谁能给我解释一下。
-(void)viewDidLoad
[super viewDidLoad];
self.forwardButton = [[UIBarButtonItem alloc]initWithTitle:@"Forward" style:UIBarButtonItemStylePlain target:self action:@selector(forward)];
self.backButton = [[UIBarButtonItem alloc]initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(back)];
NSArray *buttonsArray = @[self.backButton,self.forwardButton];
CGRect toolBarFrame = CGRectMake(0, self.view.frame.size.height - 44, self.view.frame.size.width, 44);
self.toolbar = [[UIToolbar alloc]initWithFrame:toolBarFrame];
[self.toolbar setItems:buttonsArray animated:YES];
[self.toolbar sizeToFit];
[self.view addSubview:self.toolbar];
【问题讨论】:
对我来说似乎是故事板,但无论如何...要澄清问题,请检查类似问题:Unable to set frame correctly before viewDidAppear 或 UIViewController returns invalid frame? 【参考方案1】:在viewDidLoad
中添加子视图,但在viewWillAppear
中设置其frame
。 self.view.frame
是在 UIKit 调用 viewWillAppear
之前设置的。您在viewDidLoad
中获得的值是在 nib 中设置的值,并且通常与实际的 frame
不同。
别忘了设置autoresizingMask
或使用自动布局。
【讨论】:
那么边界是在框架之前设置的吗? UIKit 在viewWillAppear:
之前设置了正确的尺寸,这意味着将设置frame
、bounds
和center
。所有这些属性都由对应的CALayer
的相同属性支持,因此,除非设置了transform
,否则您应该期望frame
和bounds
在“正确性”方面具有相似的行为。希望这是有道理的。以上是关于为啥在 viewDidLoad 中添加子视图不起作用的主要内容,如果未能解决你的问题,请参考以下文章
在 viewDidLoad 中添加子视图有奇怪的行为 [重复]