3

(询问和自我回答,因为我在谷歌上没有找到任何点击,但最终通过反复试验设法找到了解决方案)

在 iOS 5 和 6 中,Apple 添加了一些丑陋的 hack 以使 InterfaceBuilder 支持“嵌入式”视图控制器。他们没有记录这些是如何工作的,他们只给出了代码级别的示例,并且只涵盖了有限的案例子集。

特别是,我想要一个有时隐藏的嵌入式视图控制器 - 但如果你尝试明显的方法它不起作用(你会留下一个白色矩形):

childViewController.view.hidden = TRUE;
4

4 回答 4

5

你为什么不直接为你的容器视图创建一个 IBOutlet 并做

self.containerView.hidden = YES;
于 2013-08-26T22:30:46.287 回答
3

他们是如何做到的,这似乎是自 iOS 2 以来工作的手动方式的一种变体(但只支持视图,不支持视图控制器)——有一个真实的、真正的 UIView 嵌入到父级中(源代码示例中没有提到- 它仅在您使用 InterfaceBuilder 时添加!)。

所以,相反,如果你这样做:

childViewController.view.superview.hidden = TRUE;

...有用!

此外,与直觉相反,您可以从 viewDidLoad 开始随时调用此方法 - Apple 的“embed segue”hack在调用 viewDidLoad之前执行。

因此,您可以在启动时执行此操作,以使您的 childViewController 启动时不可见。

于 2013-08-26T21:24:18.877 回答
3

用这个[self.childviewController setHidden:YES];

于 2013-08-28T13:02:57.707 回答
0

如果有人需要隐藏/显示所有子视图或迭代它们:

func hideChildrenViews() {
    for view in self.view.subviews {
        (view as! UIView).hidden = true
    }
}

func showChildViews() {
    for view in self.view.subviews {
        (view as! UIView).hidden = false
    }
}
于 2015-05-15T14:37:24.823 回答