UITabBarController仅显示单个标签页问题求助
解决UITabBarController标签页点击前不显示的问题
你当前的问题是因为设置了UINavigationController的title,这个值只会同步到导航栏的标题,不会自动映射到TabBar的标签标题。TabBar的标签内容是从对应ViewController的tabBarItem属性读取的,所以需要直接配置这个属性。
修改方案1:直接设置导航控制器的tabBarItem
修改代码中设置标题的部分,把导航控制器的title替换为tabBarItem.title,同时可以合并图片设置的逻辑:
@objc func didTapButton(){ let tabBarVC = UITabBarController() let vc1 = UINavigationController(rootViewController: FirstViewController()) let vc2 = UINavigationController(rootViewController: SecondViewController()) let vc3 = UINavigationController(rootViewController: ThirdViewController()) // 直接配置TabBarItem的标题和图片 vc1.tabBarItem = UITabBarItem(title: "My Groups", image: UIImage(systemName: "bell"), tag: 0) vc2.tabBarItem = UITabBarItem(title: "My Events", image: UIImage(systemName: "star"), tag: 1) vc3.tabBarItem = UITabBarItem(title: "Browse Events", image: UIImage(systemName: "person"), tag: 2) tabBarVC.setViewControllers([vc1, vc2, vc3], animated: false) tabBarVC.modalPresentationStyle = .fullScreen present(tabBarVC, animated: true) }
修改方案2:在子ViewController中配置TabBarItem
把每个页面的TabBar配置放在各自的ViewController里,比如在FirstViewController的viewDidLoad中添加:
override func viewDidLoad() { super.viewDidLoad() self.tabBarItem.title = "My Groups" self.tabBarItem.image = UIImage(systemName: "bell") // 导航栏标题可以单独设置 self.title = "My Groups" }
这样主函数里只需要创建并添加ViewController即可,代码结构更清晰:
@objc func didTapButton(){ let tabBarVC = UITabBarController() let vc1 = UINavigationController(rootViewController: FirstViewController()) let vc2 = UINavigationController(rootViewController: SecondViewController()) let vc3 = UINavigationController(rootViewController: ThirdViewController()) tabBarVC.setViewControllers([vc1, vc2, vc3], animated: false) tabBarVC.modalPresentationStyle = .fullScreen present(tabBarVC, animated: true) }
两种方案都能让TabBar在初始化时就加载所有标签的标题和图片,无需点击后才显示。
内容的提问来源于stack exchange,提问作者Zoe Wilkie Tomasik
相关产品推荐
相关产品推荐

