iOS 6 上出现导航栏和表格视图之间的黑条

Posted

技术标签:

【中文标题】iOS 6 上出现导航栏和表格视图之间的黑条【英文标题】:Black bar between navigation bar and table view appears on iOS 6 【发布时间】:2012-09-22 20:44:33 【问题描述】:

自从我开始使用ios 6后,我似乎遇到了一个问题,在使用iOS 5时没有出现。起初我以为这可能只是一个模拟器错误,但自从我今天在我的iPhone 5上测试它,我可以看到它不仅仅是在模拟器中。

我正在以编程方式创建所有内容——我似乎更喜欢这样做(我认为这是因为我的 html/CSS 背景!)——但我对 Objective-C 还是相当陌生,我找不到一个如何以编程方式设置导航控制器/表格视图的完整示例,所以我从我能找到的信息块中将它们放在一起,因此,我可能做一些根本错误的事情。但是,它在 iOS 5 上运行良好(并且仍然运行良好)。

问题是我在导航栏和表格视图之间有一个黑条,但奇怪的是,如果我推送一个视图并返回到那个原始视图,该条就会消失,直到重新出现我完全重启了应用程序。

下图是启动时的应用程序 (1),当我在 (2) 中推送一个视图时,以及在我返回它之后的初始视图 (3):

这是我的代码:

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    RootViewController *rootController = [[RootViewController alloc] init];
    self.window.rootViewController = rootController;

    self.navigationController = [[UINavigationController alloc] initWithRootViewController:rootController];
    [self.window addSubview:navigationController.view];

    [self.window makeKeyAndVisible];

    NSLog(@"Window frame: %@", NSStringFromCGRect(self.window.frame));

    return YES;

RootViewController.m

- (void)loadView

    self.title = @"Title";

    self.tableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] bounds] style:UITableViewStylePlain];
    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    self.view = self.tableView;

    NSLog(@"tableView frame: %@", NSStringFromCGRect(self.tableView.frame));

    UIBarButtonItem *newViewButton = [[UIBarButtonItem alloc] initWithTitle:@"New View"
                                                                  style:UIBarButtonItemStylePlain
                                                                 target:self
                                                                 action:@selector(newViewButtonTapped:)];
    [self.navigationItem setRightBarButtonItem:newViewButton animated:NO];

我添加了 NSLogs 以查看它们是否显示了任何可能对我有帮助的内容。输出是:

tableView frame: 0, 0, 320, 480
Window frame: 0, 0, 320, 480

谁能告诉我我做错了什么?似乎有类似/相同的问题(Black bar overtop navigation bar - 在 cmets 中),但我还没有找到答案。

谢谢,提前!

【问题讨论】:

在***.com/questions/6225938/…有任何帮助吗? 谢谢,@JereKäpyaho。我想我理解他们在一些答案中所说的话,但我一直在摆弄代码,无论我尝试什么,它都不会动。即使我使用非常不寻常的框架,表格视图也根本不会移动。我认为黑色条的大小确实与状态栏的大小相同。 【参考方案1】:

您将 RootViewController 添加到窗口两次,一次是通过设置 UIWindow.rootViewController(在内部执行 [window addSubview:rootViewController.view]),另一次是通过将其添加为导航控制器的子视图。

你应该这样做:

RootViewController *rootController = [[RootViewController alloc] init];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:rootController];
self.window.rootViewController = navigationController;

根据经验,除非您知道您确实想要,否则切勿将视图直接添加到窗口中。

【讨论】:

以上是关于iOS 6 上出现导航栏和表格视图之间的黑条的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 7 中,状态栏和导航栏出现在我的视图边界上

UITableView 出现奇怪的黑条

导航栏和视图之间的分隔符 - iOS 7

iOS中表格视图顶部的奇怪间隙

Swift 中的下拉搜索栏/视图?

隐藏导航栏和内容之间的分隔线