0

在嵌入标签栏的 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 选择的出色名称。国王赤身裸体。

4

2 回答 2

1

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

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

如果这对您来说不可能,您可以在每次切换标签栏中的页面时更改标签栏控制器的标题。

于 2017-06-12T12:22:31.093 回答
0

超级丑陋的 hack 是让包含的标签栏控制器设置 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];
}

线索就在这里: 为什么当单元格全屏时 UICollectionView 会记录错误?

于 2017-06-12T12:23:44.733 回答