在 iPad 上使用 SwiftUI NavigationView 在代码中切换侧边栏

gre*_*rey 5 swift swiftui ipados

我正在尝试通过使用NavigationView来利用SwiftUI 2.0 的内置侧边栏,如下所示:

NavigationView {
   MainView()
   ListView()
   DetailView()
}.navigationBarHidden(true)
Run Code Online (Sandbox Code Playgroud)

但由于我想使用自己的自定义后退按钮,因此我隐藏了导航栏并尝试使用不起作用的代码切换侧边栏。

self.presentationMode.wrappedValue.dismiss()
Run Code Online (Sandbox Code Playgroud)

我已经看到了很多针对macOS的解决方案:

NSApp.keyWindow?.firstResponder?.tryToPerform(#selector(NSSplitViewController.toggleSidebar(_:)), with: nil)
Run Code Online (Sandbox Code Playgroud)

但我似乎找不到iPad的同等产品,提前致谢。

Man*_*nny 0

所以这不是一个好的长期解决方案,但如果你像我一样并且 100% 需要本机方法来工作,这里就是它如何被黑客攻击。使用https://github.com/siteline/SwiftUI-Introspect您可以在层次结构中找到正确的视图控制器并设置显示模式。

Text("Some View").introspectViewController { vc in
    guard let splitVC = vc.parent?.parent as? UISplitViewController else {
        return
    }

    splitVC.preferredDisplayMode = .oneBesideSecondary
}
Run Code Online (Sandbox Code Playgroud)

这很脆弱,但很有效。