导航控制器导航栏仅以普通代码覆盖屏幕的左上半部分

navigation controller navigation bar only covers top left half of screen in plain vanilla code

我几个月没接触它,只是在做一些 ios 编程,今年我是新手。我刚开始一个新项目,我所做的只是以编程方式将导航控制器设置为根视图控制器。

代码如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.
        self.window.backgroundColor = [UIColor whiteColor];
        [self.window makeKeyAndVisible];


    UINavigationController *nvc = [[UINavigationController alloc] init];
    nvc.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    nvc.view.backgroundColor = [UIColor yellowColor];
    nvc.title = @"Woah";
//    nvc.navigationBarHidden = TRUE; this works ok

    self.window.rootViewController = nvc;

    return YES;
}

我没有 post 图片的信誉点,但它是:http://i.stack.imgur.com/tbcqi.png

如您所见,标题未显示在导航栏中。另外,很奇怪的是,导航栏只在左上角而不是在整个视图中。我在这里错过了什么?此外,如果我将注释掉的行设置为 运行,以隐藏栏,那确实有效。不过酒吧我当然要,我不想要。

这是我刚开始的一个全新项目,我在两个新项目中尝试过。在这个奇怪的左角栏的两种情况下,我都有相同的结果。知道我做错了什么吗?谢谢

我不确定你创建 UIWindow 的目的是什么,因为它是很久以前的代码。

现在,当您将 xCode 升级到最新版本时,无需手动创建 UIWindow。

此外,当您创建 UINavigationController 时,设置 UINavigationController 的 rootView 控制器会更好。

我很确定UIViewController需要嵌套在UINavigationController中。

因此您的代码需要像下面这样更改;

HomeViewController *homeVC = [[HomeViewController alloc] initWithNibName:@"HomeViewController"]; //Let's assume this is the first VC on the navigation stack
UINavigationController *nvc = [[UINavigationController alloc] initWithRootViewController:homeVC];
//    nvc.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
//    nvc.view.backgroundColor = [UIColor yellowColor]; use nvc.navigationBar.tintColor = [UIColor yellowColor];
//    nvc.title = @"Woah"; use homeVC.title = @"Woah";
//    nvc.navigationBarHidden = TRUE; this works ok

self.window.rootViewController = nvc;

您需要添加一个UIViewController作为您UINavigationController的根。目前您没有管理视图控制器。

导航栏标题反映了每个 UIViewControllers UINavigationItem 的内容。默认情况下,导航栏上的标题是导航堆栈中最顶部的 UIViewController 的标题。

后退按钮奇怪地反映了从顶部数第二个 UIViewController 的 UINavigationItem 的标题。因此,要设置后退按钮标签,您实际上将其设置在推动顶部控制器的控制器的 navigationItem 中。

您可以通过访问顶视图控制器 navigationItem 或从顶视图控制器内部使用以下命令来更改标题:

<a view controller>.navigationItem.title = @"My New Title";

或者如果来自控制器内部:

self.navigationItem.title = @"My New Title";