无法在选项卡中的 VC 中设置导航栏标题

Posted

技术标签:

【中文标题】无法在选项卡中的 VC 中设置导航栏标题【英文标题】:Can't set navbar title in a VC that's in a tab 【发布时间】:2017-06-12 12:01:11 【问题描述】:

在嵌入标签栏的 VC 中,我这样做:

- (void)viewDidLoad

    self.title = LS(@"Choose a soundtrack");
    self.tabBarItem.title = LS(@"Music"); // self.title would not fit into tab 

    [super viewDidLoad];

我希望 self.title 能够渗透到导航栏和选项卡中 它最终出现在 tabbaritem 中(这就是我必须恢复的原因 紧随其后)。

但它没有显示在导航栏中。 同样,self.navigationItem.title 设置效果为零。

同样 self.navigationController.title = LS(@"Choose a soundtrack"); 效果为零。

如果重要,标签栏会像这样被推入导航控制器:

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"TabbedStory" bundle:[MediaManager mediaBundle]];
SixTabViewController *stvc = [storyBoard instantiateInitialViewController];
[self.navigationController pushViewController:stvc animated:YES];

请注意我为 tabbar vc 选择的好名字。国王赤身裸体。

【问题讨论】:

使用 self.navigationController.title = "Your title" 而不是设置 vc 的标题。 看起来您的 VC 实际上首先嵌入到导航控制器中,该控制器嵌入到选项卡栏控制器中...如果您澄清视图控制器层次结构并附上屏幕截图会很好。 标签栏控制器被推入 navstack。有问题的 VC 代表选项卡栏中的选项卡之一。 【参考方案1】:

如果您的层次结构是 NavController->TabBarController->ViewController 那么它将不起作用;只有直接嵌入视图控制器的标题才会显示在导航控制器的导航栏中。但在您的情况下,导航控制器显示标签栏控制器并尝试显示它的标题(不存在)。

通常使用另一种层次结构:将导航控制器嵌入标签栏控制器,然后视图控制器的标题将显示在导航控制器的导航栏中。

如果您无法做到这一点,您可以在每次切换标签栏中的页面时更改标签栏控制器的标题。

【讨论】:

好的,谢谢。我在标签栏的每一页中没有单独的导航堆栈,所以我最终得到了建议的 hack【参考方案2】:

超级丑陋的技巧是设置包含标签栏控制器 navigationItem 标题如下:

-(void)prepareForIndex:(NSUInteger)i

...
switch(i) 
    case 2:
        self.navigationItem.title = LS(@"Choose a soundtrack");



-(void)setSelectedIndex:(NSUInteger)i

[self prepareForIndex:i];
[super setSelectedIndex:i];


- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController

    [self prepareForIndex:self.selectedIndex];

线索在这里: Why does UICollectionView log an error when the cells are fullscreen?

【讨论】:

以上是关于无法在选项卡中的 VC 中设置导航栏标题的主要内容,如果未能解决你的问题,请参考以下文章

Vuetify:导航栏在新选项卡中打开特定链接

标签栏控制器中的导航控制器

Ruby Motion 中的导航 + 选项卡 - 加载时不显示选项卡标题

使用选项卡视图控制器演练

在 iOS 5 和 6 上仅支持在一个选项卡中旋转

如何在 vue 路由中导航到 Bootstrap-vue 选项卡中的特定选项卡?