如何为UITabBarController中重复引用的同个Storyboard设置不同UITabBarItem?
解决同一个Storyboard引用在TabBar中显示不同图标的问题
我太懂这种困扰了——用同一个外部Storyboard的引用做TabBar的两个条目,想设置不同图标却要么不生效,要么连标签栏都没了。核心原因是:Storyboard引用加载的控制器会优先使用自身内部配置的UITabBarItem,如果原Storyboard里没设置,系统也不会自动套用TabBarController的默认配置。下面给你两种靠谱的解决办法:
方法一:通过代码在TabBarController中手动设置
这种方法最灵活,完全不受外部Storyboard的限制,也是我最推荐的:
- 先把你的
BookTableStoryboard里的根控制器TabBarItem清空(如果之前设置过,直接在Attributes Inspector里删掉标题和图标); - 在你的UITabBarController代码里,重写
viewDidLoad方法,为前两个子控制器分别配置自定义的TabBarItem:
Swift 版本
override func viewDidLoad() { super.viewDidLoad() // 安全获取前两个子控制器 guard let firstTabVC = viewControllers?[0], let secondTabVC = viewControllers?[1] else { return } // 第一个标签的配置(示例,你可以换成自己的图标和标题) firstTabVC.tabBarItem = UITabBarItem( title: "我的书架", image: UIImage(systemName: "book"), selectedImage: UIImage(systemName: "book.fill") ) // 第二个标签的配置 secondTabVC.tabBarItem = UITabBarItem( title: "发现书籍", image: UIImage(systemName: "magnifyingglass"), selectedImage: UIImage(systemName: "magnifyingglass.circle.fill") ) }
Objective-C 版本
- (void)viewDidLoad { [super viewDidLoad]; UIViewController *firstTabVC = self.viewControllers[0]; UIViewController *secondTabVC = self.viewControllers[1]; // 第一个标签的配置 firstTabVC.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"我的书架" image:[UIImage systemImageNamed:@"book"] selectedImage:[UIImage systemImageNamed:@"book.fill"]]; // 第二个标签的配置 secondTabVC.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"发现书籍" image:[UIImage systemImageNamed:@"magnifyingglass"] selectedImage:[UIImage systemImageNamed:@"magnifyingglass.circle.fill"]]; }
方法二:在主Storyboard中为Storyboard引用配置TabBarItem(部分场景生效)
如果不想写代码,可以试试这个可视化操作:
- 选中TabBarController里的第一个Storyboard引用,打开Attributes Inspector;
- 找到Tab Bar Item区域,直接设置Title、Image和Selected Image;
- 对第二个Storyboard引用重复同样操作,设置不同的内容。
⚠️ 注意:如果外部Storyboard里的控制器已经设置了TabBarItem,这个方法会被覆盖,所以还是方法一更稳定。
最后排查小技巧:如果运行后还是不显示标签栏,检查下TabBarController的viewControllers是否正确关联了两个Storyboard引用,同时确保外部Storyboard的根控制器没有写hidesBottomBarWhenPushed = YES这类隐藏TabBar的代码。
内容的提问来源于stack exchange,提问作者Andrew Bennet
相关产品推荐
相关产品推荐

