我最近才开始为 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/

10-14 21:10
查看更多