0

问题

应用程序的窗口(类型UIWindow *,应用程序委托中的属性)是 的超级视图[[window rootViewController] view]吗?

我在应用程序委托方法中的代码application:didFinishLaunchingWithOptions:[self window setRootViewController:[self myNavigationController]]self指应用程序委托)。请注意,我没有写[self window addSubview:[[self myNavigationController] view]];.

我使用非 ARC、Xcode 5、iOS 7 以编程方式创建所有视图(没有故事板、没有界面构建器)。

问题的背景

我需要知道这个问题的原因是我想在 的超级视图中添加一个topLayoutGuide约束[[window rootViewController] view],其中窗口rootViewController是一个导航控制器。

虽然我不确定是否最好创建一个自定义的容器视图控制器来包含导航控制器,以便我们可以将topLayoutGuide约束添加到容器视图控制器的视图中(现在显然它是导航控制器视图的超级视图)。

我需要添加topLayoutGuide约束的原因是当我通过更改导航控制器视图的框架来显示/隐藏导航栏时,我的代码似乎存在错误。当我通过将框架的原点的 y 坐标移动 64 点(状态栏的 20 点加上导航栏的 44 点的高度)来设置导航控制器视图的框架(也是 [[window rootViewController] 视图])时,导航控制器的内容视图仅在 iOS 7 的导航栏下方意外移动了 20 个点。这种意外行为让我想起了通过添加 topLayoutGuide 解决的问题

4

1 回答 1

0

当您将根控制器分配给窗口时,控制器的根视图将成为窗口的子视图。所以是的,窗口是 window.rootViewController.view 的超级视图。

不确定为什么要通过更改导航控制器的框架来隐藏导航栏。导航控制器为此内置了功能:导航栏显示/隐藏

于 2013-12-06T08:00:14.840 回答