无法在选项卡中的 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 中设置导航栏标题的主要内容,如果未能解决你的问题,请参考以下文章