具有透明背景的模态 UISplitViewController

Posted

技术标签:

【中文标题】具有透明背景的模态 UISplitViewController【英文标题】:Modal UISplitViewController with transparent background 【发布时间】:2016-10-04 15:15:27 【问题描述】:

我需要模态地呈现一个 UISplitViewController(在 iPhone 和 iPad 上),它应该有一个透明的背景(我将添加模糊视图)。 在呈现 UIViewController 时我能够做到这一点,但它不适用于拆分视图控制器。 我的拆分视图控制器有 2 个导航控制器。

我的结果是主视图控制器有黑色背景。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

您的UISplitViewController 是根视图控制器吗?如果没有,它可能会表现出奇怪的行为。每个苹果:

注意

"...虽然可以在其他一些容器视图控制器中安装拆分视图控制器作为子视图,但在大多数情况下不建议这样做。拆分视图控制器通常安装在应用程序窗口的根目录中。. ..”

我用过这个(从细节视图控制器调用,使用带有两个导航控制器的拆分视图控制器。)此时我想重置导航堆栈:

let firstVC = self.storyboard?.instantiateViewController(withIdentifier: "FirstViewController") as! FirstViewController
let secondVC = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
    // Get a reference the the Master View nav controller
let masterNav = self.splitViewController!.viewControllers[0] as! UINavigationController
    // Set desired VC's as nav stack RootViewControllers        
self.navigationController?.setViewControllers([matchVC], animated: true)
masterNav.setViewControllers([masterMatchTableView], animated: true)

如果您想维护导航堆栈,您可以在两个导航控制器上调用 .pushViewController

如果您仍在处理此问题,请发布一些代码,我很乐意查看。

编辑:

因此,您不能以模态方式呈现拆分视图控制器: https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/SplitViewControllers.html

拆分视图控制器必须始终是您创建的任何界面的根。换句话说,您必须始终将 UISplitViewController 对象中的视图安装为应用程序窗口的根视图。然后,拆分视图界面的窗格可能包含导航控制器、选项卡栏控制器或您需要实现界面的任何其他类型的视图控制器。 拆分视图控制器不能以模态方式呈现。

我上面贴的代码 sn-p 将同时呈现主视图和详细视图。或者,您可以将新的 VC 显示为 Detail View,并将 UISplitViewController.preferredDisplayMode = .primaryHidden 设置为模态显示单个 VC。

【讨论】:

有没有办法以透明背景呈现 SplitViewController(模态或推送)?我需要主 VC 和细节 VC 是透明的。

以上是关于具有透明背景的模态 UISplitViewController的主要内容,如果未能解决你的问题,请参考以下文章

iOS:具有透明背景的模态 ViewController

如何在 SwiftUI 中制作具有透明背景的模态视图?

如何呈现具有透明背景的模态视图控制器

具有透明背景的 UIModalPresentationFormSheet?

iOS - 半透明模态视图控制器

具有透明背景的 QDialog 显示为黑色