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

Can't set navbar title in a VC that's in a tab

在嵌入标签栏的 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"); 效果为零。

如果重要的话,tabbar 会像这样被推送到导航控制器中:

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

注意我为标签栏选择的好名字 vc。国王全裸

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

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

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

超级黑客是设置包含标签栏的控制器 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?