TabViewController 在切换选项卡并呈现模态 ViewController 后为黑色 [重复]

Posted

技术标签:

【中文标题】TabViewController 在切换选项卡并呈现模态 ViewController 后为黑色 [重复]【英文标题】:TabViewController is black after switching Tabs and presenting modal ViewController [duplicate] 【发布时间】:2019-02-06 16:18:44 【问题描述】:

我有一个 UITabBarController 并且需要一直显示 TabBar。 在代表 Tab 的 ViewController 中,我使用 childViewController.modalPresentationStyle = .overCurrentContext 呈现其他 Viewcontroller。 当我展示 ChildViewController (UIViewControllerA0,..) 时,我会展示一个导航栏。要返回,我关闭 currentChildViewController。

这工作正常,但以下步骤以黑屏结束。

    在标签栏中选择 UIViewControllerA 在 UIViewControllerA 上单击某些内容并显示 (UIViewControllerA0) UIViewControllerA0 与导航栏一起显示返回 切换到 Tab UIViewControllerC 或 B 切换到标签 UIViewControllerA -> 子 UIViewControllerA0 仍然可用 返回 NavigationBar 并关闭 UIViewControllerA0 UIViewControllerA 是黑色 切换到 UIViewControllerB 或 C 选项卡并再次返回 -> UIViewControllerA 显示正确

我的 UI 结构是

UITabBarController
|-UINavigationController
|   --UIViewControllerA Tab
|      --UIViewControllerA0
|      --UIViewControllerA1
|   
|--UINavigationController
|   --UIViewControllerB Tab
|      --UIViewControllerB0
|      --UIViewControllerB1
|
|--UINavigationController
|   --UIViewControllerC Tab
|      --UIViewControllerC0
|      --UIViewControllerC1
|

我已经尝试了几种presentationStyles,但是在呈现“ChildViewController”时我需要显示Tabbar。 我还尝试以某种方式重新加载 ViewController,但失败了,我认为这不是正确的方法。

是否有解决方案,或者无法使用这样的 TabNavigation?

亲切的问候

【问题讨论】:

所以...UIViewControllerA 是导航控制器的根 VC?在UIViewControllerApresent(UIViewControllerA0) 中点击一个按钮并“显示一个导航栏”?意思是,你在视图中添加了一个导航栏,对吧? UIViewControllerA0 没有嵌入到导航控制器中? 啊 - 找到了您的解决方案。 UIViewControllerA,B 和 C 是 NavigationViewControllers 的 rootViewController。 NavigationViewControllers 是 TabViewController 的 viewControllers。是的,显示 NavigationBar 是在顶部返回的一种自定义 Navigationbar。 UIViewControllerA0 和其他的不是嵌入的,只是用 present(...) 我在答案中提到了它现在是如何完成的。我在一个未被接受的答案中可能重复的链接中发现了这种方法,但我现在赞成。 【参考方案1】:

好吧,这很奇怪,这是我的presentationContext和PresentationStyle的开始组合,但我再次尝试并将其设置回“开始”,现在它可以使用以下设置:

以 UIViewControllerA 为例,当呈现一个 Child 时

childViewController.modalPresentationStyle = .overCurrentContext self.definesPresentationContext = true self.present(childViewController, animated: true, completion: nil)

关闭我调用的 ChildViewController 时

childViewController.dismiss(animated: true) 

我现在可以停留在选项卡上的 ChildViewController 中,在选项卡之间切换,甚至可以在其他选项卡上打开其他 ChildViewController,并且在关闭 ChildViewController 时会显示正确的 ViewController(UIViewControllerA、UIViewControllerB 或 UIViewControllerC)

我现在花了几个小时在这上面,现在它似乎很容易......

【讨论】:

以上是关于TabViewController 在切换选项卡并呈现模态 ViewController 后为黑色 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

UITabbar 以编程方式选择选项卡并执行egue

mapView 上的点在移动到下一个选项卡时消失

在 TabViewController 中创建 UIScrollView

UIAccelerometer, ViewControllers, and TabViewController, tabs 和 MotionBegan 之间的切换没有被调用

使用 Selenium WebDriver 和 Java 切换选项卡

使用关闭按钮切换引导选项卡