我最近才开始为 iOS/iPhone
编程。我以为我知道我在做什么,直到 XCode5/iOS7
出现。以前,我用 UIViewController
创建了一个派生自 XIB
的类,添加了一个标签,并以编程方式将其添加到 rootWindow:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
... // boilerplate code
MyViewController* myRoot = [[MyViewController alloc]init];
self.window.rootViewController = myRoot;
为了使用导航栏,我稍微更改了代码:
MyViewController* myRoot = [[MyViewController alloc]init];
UINavigationController* navigationController = [[UINavigationController alloc]init];
[navigationController pushViewController:myRoot animated:YES];
self.window.rootViewController = navigationController;
这似乎工作正常。但是,在
iOS 7
上,我的自定义 View Controller 顶部的控件似乎位于导航栏后面。一些谷歌搜索导致 this link 描述状态栏中的变化。这似乎也表明,
A)
UINavigationController
应该自动处理更改B)“自动布局”应该自动处理变化,
我不应该担心。但是,我上面的示例应用程序似乎没有自动处理任何事情。
我还发现了其他一些以不同方式使用 Controller 的示例代码:将导航 Controller 的 View 作为
subView
添加到现有 View 中。这种在应用程序生命周期的后期添加导航 Controller 是有意义的,但我试图在启动时设置一个。我是否正确使用了
UINavigationController
?对于
iOS7
与早期版本,我需要考虑什么?如何配置“自动布局”(我在任何地方的界面构建器中都没有看到)?
最佳答案
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
return YES;
}
关于ios - 如何正确使用 UINavigationController,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18972720/