iOS TabBarController 只显示黑屏

Posted

技术标签:

【中文标题】iOS TabBarController 只显示黑屏【英文标题】:iOS TabBarController shows only black screen 【发布时间】:2018-03-16 12:28:30 【问题描述】:

我创建了一个带有 4 个 UIViewControllers 的 TabBarController。但是,当我想在 TabBarController 中显示其中一个 ViewController 时:

func gotoMainAppVC()

    let mainVC:SearchVC = SearchVC()
    self.present(mainVC, animated: true, completion:  nil)

我只得到一个纯黑屏。我做错了什么?

【问题讨论】:

searchVC 是您的标签栏控制器吗?你的 tabbarcontroller 是通过 storyboard 创建的吗? 添加更多细节... 不,searchVC 是对应选项卡的 UIViewController 之一。 TabBarController 本身是在 Storyboard 中创建的,而不是在代码中 present(animated:) 应该以模态方式呈现视图控制器(默认情况下)。我想这不是你想要的。查看与 UITabBarController developer.apple.com/documentation/uikit/uitabbarcontroller/…相关的手册 PS:通常不需要继承UITabBarController,因为它只是一个容器,控制器。我建议考虑一下。 【参考方案1】:

这不是它的工作原理。

我不确定self 在您的上下文中是什么,但我希望它是标签栏控制器或标签栏上的视图控制器之一。

调用present 意味着你想在当前视图控制器上显示一个视图控制器,默认情况下从底部向上带来一个新的全屏视图控制器。

由于您通过调用SearchVC() 创建了一个新的视图控制器实例,这不是您在故事板中看到的视图控制器。您可以创建任何视图控制器的任何实例,但在您的情况下,如果您在情节提要中设计了SearchVC,您希望实际使用它的那个版本。为此,您需要在情节提要中设置情节提要 ID。完成后,您应该将其初始化为:

UIStoryboard(name: <#T##String#>, bundle: nil).instantiateViewController(withIdentifier: <#T##String#>)

let mainVC:SearchVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "TheIDIHaveSet") as! SearchVC

但同样,这不会为您提供标签栏内的视图控制器,而是创建一个新实例。它不会将其作为选项卡之一插入,而是呈现一个新的全屏视图控制器。

【讨论】:

谢谢!那么显示标签栏控制器的最佳方式是什么? @erdwfddsfdfsdfsdffd 我需要更多相关信息。现在你说要显示标签栏控制器,有问题的是,它似乎是标签栏中已经可见的特定视图控制器。

以上是关于iOS TabBarController 只显示黑屏的主要内容,如果未能解决你的问题,请参考以下文章

ios模拟器显示黑屏

iOS TabbarController 覆盖内容

苹果手机开不了机只显示黑苹果标志怎么办?

如何在运行时在 TabBarcontroller 中排列标签栏项目?

iOS 14.2,UIKit 编程标题未显示

在 TabbarController 中呈现 NavigationalViewController