新视图控制器的 iOS addSubview 不起作用
Posted
技术标签:
【中文标题】新视图控制器的 iOS addSubview 不起作用【英文标题】:iOS addSubview of a new view controller does not work 【发布时间】:2015-07-16 15:54:44 【问题描述】:我正在尝试做这样的事情 -
- (void)viewDidLoad
[super viewDidLoad];
ThingViewController *thingViewController = [self thingControllerForCard:self.card];
thingViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
UIView *view = [thingViewController view];
[self.view addSubview:view];
它只是给我一个白屏,里面什么都没有。如果我在导航堆栈上推送新的视图控制器,它会正确显示控制器。知道我可能缺少什么吗?
【问题讨论】:
你不应该只是将一个 VC 的视图添加到另一个视图控制器 - 你需要告诉两个 VC 他们有一个子/父视图控制器。相关方法调用在 Apple 的 View Controller Programming Guide 中的Implementing a Custom Container View Controller 中进行了描述。 【参考方案1】:您应该在viewDidLayoutSubviews
上设置thingViewController 框架。
viewDidLoad
此时没有正确设置帧:
- (void)viewDidLoad
[super viewDidLoad];
ThingViewController *thingViewController = [self thingControllerForCard:self.card];
UIView *view = [thingViewController view];
[self.view addSubview:view];
- (void)viewDidLayoutSubviews
[super viewDidLayoutSubviews];
thingViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
【讨论】:
这是在正确的轨道上,但 viewDidLayoutSubviews 确实是视图控制器布局子视图的正确位置。 viewDidLayoutSubviews 将被调用,例如,如果视图的框架发生变化。 viewWillAppear 仅在视图添加到视图层次结构时被调用。 已更新,感谢@rschmidt。有趣的是,我喜欢使用 viewDidLayoutSubviews 进行框架设置,不知道为什么我忘记了。以上是关于新视图控制器的 iOS addSubview 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
keywindow 在 ([[[UIApplication sharedApplication] keyWindow] addSubview:myView];) iOS 6 中不起作用
iOS 7 addSubview 为我的 UIView 添加了额外的长度,这是为啥呢?
addSubview与呈现模式ViewController之间的区别?