【发布时间】:2013-12-06 07:22:24
【问题描述】:
问题
应用程序的窗口(@987654325@ 类型,app delegate 中的一个属性)是[[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。
【问题讨论】:
标签: ios window autolayout superview