iOS 9 返回 barButtonItem 未显示在导航控制器上

iOS 9 back barButtonItem not showing on navigation controller

描述的问题类似,除了我的 TabBar 实际上显示 BackButton 而我的 NavigationBar 不是。在这个问题中,我为解决问题的答案提供了一个 link,因为 NavigationController 中有一个 NavigationController,我没有,所以这是一个不同的问题。

我的storyboard的基本流程是登录(UIView) - TabBar (UITabBarController) - NavigationController (UINavigationController) - 实际可见屏幕 (UITableViewController) - 出现问题的新 TableView (UITableViewController)。

在新的实际可见 screenTableView 上,顶部的 NavigationBar 显示得很好,我可以单击 BackBarButton 应该的一般区域是,它将返回,但没有 BackBarButton 项目可见。

我试过改变颜色,在之前的ViewController中分配它,确保它可见,等等。其中none显示了Back Button。好像有但是没有显示出来

有什么想法吗?从另一个与我的问题相似的问题来看,这似乎是一个 iOS 9 特定的问题。

EDIT 通过查看 Debug View Hierarchy,我可以看出后退按钮实际上在那里,但它上面没有标签或后退箭头。 如何使背面标签可见?

编辑 2 这是视图控制器的 viewDidLoad 方法,应该出现后退按钮。

- (void)viewDidLoad {
    [super viewDidLoad];

    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:nil action:nil];

    [self.navigationItem.backBarButtonItem setTintColor:[UIColor whiteColor]];
    // Other unimportant stuff
}

我转至此视图控制器的方式是通过带有推送转场的情节提要。代码如下。

- (void)segueToUser: (UIButton*)button {
    long row = button.tag;
    PFObject *PFQuote = [_recent quoteAtIndex:(row-1)/2];
    PFUser *u = [PFQuote objectForKey:@"creator"];
    _send = u;
    [self performSegueWithIdentifier:@"showUser" sender:self];
}

这是我的 prepareForSegue 在与 segueToUser

相同的文件中
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"showUser"]) {


        BRETTFUserTableViewController *bfutvc = [segue destinationViewController];
        self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:nil action:nil];
        bfutvc.us = _send;
    }
}

这是我故事板的一部分的图片。 第一个 视图是 tabView second 视图是 navView 第三个 视图是 tableView 第四个视图是tableView

由于似乎没有人找到解决方案,我将提供更多信息。通过深入挖掘调试视图层次结构,我发现了一些有关后退按钮的更多信息。我可以看到那里的后退箭头完好无损,旁边有一个 NSString 似乎是 nil,我不知道为什么它是零,但这是我发现的。这是我找到的其他图片。

在你的

  • (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

你已经写了一行代码

 self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:nil action:nil];

在上一行你设置了标题“”空字符串

不要使用空字符串,而是使用要在 back-button 项目上显示的标题。 fr ex:

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];

检查它是否有帮助。

添加故事板图像,我如何将视图控制器嵌入到导航控制器中。

或者,如果您在应用中的任何位置放置了导航外观代码,那么也 post 该代码。

在你的 viewDidLoadprepareForSegue 方法中你有这个:

    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:nil action:nil];

将导航控制器的默认后退按钮替换为没有标签的按钮。

您只需删除这两行即可获得默认的后退按钮。

我终于解决了这个问题。为此,我必须进入第一个 tableViewController 的导航栏并将后退按钮标题设置为 Back,然后设置色调颜色(因为它默认为清除),现在它可以工作了。