【问题标题】:How to put tab bar in a seperate storyboard and not have problems with it and nav bar [closed]如何将标签栏放在单独的故事板中并且没有问题和导航栏[关闭]
【发布时间】:2020-11-04 02:28:57
【问题描述】:

我的项目中有很多页面,所以我使用了多个故事板。在我的登录页面之后,我想转到一个有五个页面的标签栏控制器。所以我的标签栏控制器在它自己的故事板中。故事板名称是 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. 最后一个问题是我为标签栏按钮输入的图像太大。您如何将它们调整为合适的大小。我不确定这是否是导致第二个问题的原因,但它可能是。那么我该如何解决这些问题呢。

【问题讨论】:

    标签: ios swift xcode uistoryboard


    【解决方案1】:

    未来注意事项:您一次只能问一个问题。


    对于问题 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 - 标签图标大小...您可以通过简单的搜索找到它...如果您不能找到,请返回并作为新帖子询问。

    【讨论】:

    • 抱歉回复晚了,但感谢您的提示和建议。第二个答案对我不起作用,但它引导我在代码中创建标签栏,我能够以另一种方式做到这一点。第一个答案很有效,非常感谢。下次我会记住将它们作为不同的问题发布。不过感谢您的帮助!
    猜你喜欢
    • 2019-01-08
    • 1970-01-01
    • 2013-12-02
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多