如何将选项卡栏放在单独的情节提要中并且没有它和导航栏的问题

How to put tab bar in a seperate storyboard and not have problems with it and nav bar

我的项目中有很多页面,所以我使用了多个故事板。在我的登录页面之后,我想转到一个有五个页面的标签栏控制器。所以我的标签栏控制器在它自己的情节提要中。故事板名称是 HomePage,标签栏标识符是 HomePageVC。 所以我用来从登录页面调用它的代码(登录后)是:

let storyboard = UIStoryboard(name: "HomePage", bundle: nil)
            let secondVC = storyboard.instantiateViewController(identifier: "HomePageVC")
            self.navigationController?.pushViewController(secondVC, animated: true)

主页故事板就是这样设置的 [![在此处输入图片描述][1]][1]

五个选项卡中的每一个都指向不同情节提要中的不同视图控制器(我为此使用情节提要参考)。现在我遇到了三个问题:

  1. 当我使用此方法显示选项卡栏和下一个视图控制器时,不知何故有两个导航控制器。所以基本上它是一个连接到导航栏控制器的视图控制器(并且导航栏控制器被设置为初始视图控制器)。问题是前一个视图控制器导航栏被推送到下一个视图控制器导航栏。导致双Mac栏。我想删除顶部导航栏并使用下面的文本。

  2. 我遇到的第二个问题是标签栏实际上没有正确显示它只是一个灰色栏。但是,我认为按钮仍然存在,因为当我单击标签栏中应该有按钮的部分时,它会转到该视图控制器。

  3. 最后一个问题是我为标签栏按钮放置的图片太大了。你如何将它们调整到合适的大小。我不确定这是否是导致第二个问题的原因,但它可能是。那么我该如何解决这些问题。

未来注意事项:你应该一次只问一个问题。


对于问题 1 - 双导航栏。

在您的登录视图控制器中,您可以这样做:

class LogInViewController: UIViewController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
        // show the navigation bar
        self.navigationController?.setNavigationBarHidden(false, animated: false)
    }
    
    @IBAction func loginTapped(_ sender: Any) {
        
        // hide the navigation bar
        self.navigationController?.setNavigationBarHidden(true, animated: false)
        
        let storyboard = UIStoryboard(name: "HomePage", bundle: nil)
        let secondVC = storyboard.instantiateViewController(identifier: "HomePageVC")
        self.navigationController?.pushViewController(secondVC, animated: true)
        
    }
    
}

问题 2 - 标签栏图标不显示。

在导航控制器中嵌入选项卡栏控制器通常被认为是不好的做法,因为导航会使用户感到困惑。但是,我不是 Apple,如果它符合您的设计并且导航仍然直观...

我刚刚试了一下,不,标签栏按钮图标(和标题)没有显示。不完全确定为什么...但这是一种方法。

首先,删除所有当前的标签栏控制器连接。因此,您的“主页”情节提要将只包含一个选项卡栏控制器(情节提要 ID 为“HomePageVC”)。

接下来,向您的项目添加一个 UITabBarController 子类,并将其分配给“HomePageVC”选项卡栏控制器。它看起来像这样:

class MyTabBarController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        var sb = UIStoryboard(name: "Settings", bundle: nil)
        guard let tab1VC = sb.instantiateInitialViewController() else {
            fatalError("Could not load Settings VC!")
        }
        guard let tab1Icon = UIImage(named: "settignsTabIcon") else {
            fatalError("Could not load settignsTabIcon image!")
        }
        tab1VC.tabBarItem = UITabBarItem(title: "Settings", image: tab1Icon, selectedImage: tab1Icon)

        sb = UIStoryboard(name: "Communication", bundle: nil)
        guard let tab2VC = sb.instantiateInitialViewController() else {
            fatalError("Could not load Communication VC!")
        }
        guard let tab2Icon = UIImage(named: "communicationTabIcon") else {
            fatalError("Could not load communicationTabIcon image!")
        }
        tab2VC.tabBarItem = UITabBarItem(title: "Comunication", image: tab2Icon, selectedImage: tab2Icon)

        // etc for your other 3 tabs
        
        let viewControllerList = [ tab1VC, tab2VC ]
        viewControllers = viewControllerList
        
    }
    
}

关于问题 3 - 选项卡图标大小...您可能可以通过简单的搜索找到...如果您找不到,请回来并作为新问题提问 post。