UITabBarController 使用多个故事板

Posted

技术标签:

【中文标题】UITabBarController 使用多个故事板【英文标题】:UITabBarController using multiple storyboards 【发布时间】:2020-08-05 05:22:57 【问题描述】:

我正在努力将我巨大的故事板重构为多个故事板。在此过程中,我正在努力让标签栏图像显示出来。

class CustomTabBarController: UITabBarController

    @IBOutlet weak var myTabBar: UITabBar?

    override func viewDidLoad() 
        super.viewDidLoad()
        setTabBarItems()
    

    func setTabBarItems()
        guard let tabBar1 = self.tabBar.items?[0] else  return 
        let myTabBarItem1 = tabBar1 as UITabBarItem
        myTabBarItem1.image = UIImage(named: "1-tab-bar-unselected")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
        myTabBarItem1.selectedImage = UIImage(named: "1-tab-bar-selected")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
        myTabBarItem1.title = ""
        guard let tabBar2 = self.tabBar.items?[1] else  return 
        let myTabBarItem2 = tabBar2 as UITabBarItem
        myTabBarItem2.image = UIImage(named: "2-tab-bar-unselected")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
        myTabBarItem2.selectedImage = UIImage(named: "2-tab-bar-selected")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
        myTabBarItem2.title = ""
        guard let tabBar3 = self.tabBar.items?[2] else  return 
        let myTabBarItem3 = tabBar3 as UITabBarItem
        myTabBarItem3.image = UIImage(named: "3")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
        myTabBarItem3.selectedImage = UIImage(named: "3-tab-bar-selected")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
        myTabBarItem3.title = ""
        guard let tabBar4 = self.tabBar.items?[3] else  return 
        let myTabBarItem4 = tabBar4 as UITabBarItem
        myTabBarItem4.image = UIImage(named: "4-tab-bar-unselected")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
        myTabBarItem4.selectedImage = UIImage(named: "4-tab-bar-selected")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
        myTabBarItem4.title = ""
        guard let tabBar5 = self.tabBar.items?[4] else  return 
        let myTabBarItem5 = tabBar5 as UITabBarItem
        myTabBarItem5.image = UIImage(named: "5-tab-bar-unselected")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
        myTabBarItem5.selectedImage = UIImage(named: "5-tab-bar-selected")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
        myTabBarItem5.title = ""
    


这是我以前做过的并且正在工作的。目前它不显示任何项目图像,只显示“项目”。我在导航视图控制器中添加了一个标签栏项目。

我的尝试 ・来自UITabBarController的实例化VC ・在设置导航视图控制器中设置导航项,这可行,但应用启动时标签栏为空。

感谢任何帮助

【问题讨论】:

你在导航控制器上设置了Tab bar item的图片吗? 而对于Settings.storyboard的storyboard引用,你是用viewcontroller的id作为reference id还是navigation controller的id? 感谢您的评论。是的,我已经在导航控制器上设置了标签栏项目的图像。当我点击选项卡时,会出现图标。应用启动时不会出现。我使用了导航控制器的 id 供参考 那么您应该创建标签栏类,然后将标签栏图标设置为该类,您的图标就会出现。 您好,谢谢您的评论,这不是我在做什么吗?我确实有一个标签栏类 【参考方案1】:
class CustomTabBarController: UITabBarController
override func viewDidLoad() 
       self.viewControllers![3].title = "Your Title" //This for title
       self.tabBar.items?[0].image = UIImage(named: "YourImageName")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal) // This for image


当您的图像未出现时意味着您的图像尺寸不正确,因为我也面临同样的问题。 图像可能太大而无法显示。标签栏项目图像的大小应在 28pt-32pt(像素)左右。

【讨论】:

感谢您的回答。图像大小还可以,因为它在我创建多个故事板之前就可以工作。代码与我在问题中写的完全一样。

以上是关于UITabBarController 使用多个故事板的主要内容,如果未能解决你的问题,请参考以下文章

使用 UITabbarController 和 UINavigationController 从 storyboard 调用 View

在 Nib 而不是 Storyboard 中创建 UITabBarController

是否在 UITabBarController 中多次调用 viewDidLoad?

UITabBarController的基本原理及使用

从 UITabBarController 推送的 UISplitViewController

UITabBarController + UINavigationController复合架构设计