窗口是[[window rootViewController]视图]的超级视图

时间:2013-12-06 07:22:25

标签: ios window autolayout superview

问题

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

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

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

问题的背景

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

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

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

1 个答案:

答案 0 :(得分:0)

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

不确定为什么要通过更改导航控制器的框架来隐藏导航栏。导航控制器具有内置功能:Navigation bar show/hide