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

5

我正在尝试使用 NavigationView 来利用 SwiftUI 2.0 中内置的侧边栏,代码如下:

NavigationView {
   MainView()
   ListView()
   DetailView()
}.navigationBarHidden(true)

但是,由于我想使用自己的自定义返回按钮,我隐藏了NavigationBar并尝试通过代码切换侧边栏,但这并不起作用。

self.presentationMode.wrappedValue.dismiss()

我已经看到了很多关于macOS的解决方案:

NSApp.keyWindow?.firstResponder?.tryToPerform(#selector(NSSplitViewController.toggleSidebar(_:)), with: nil)

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


1
我有一个类似的问题,链接在这里。最终,我决定制作自己的自定义侧边栏,虽然不是理想的解决方案,但对我来说是最好的解决方案。 - George
谢谢,如果下周我仍然没有得到任何解决方案,我可能会自己实现它。 - ygee
你找到解决方案了吗? - NitricWare
@NitricWare 我没有。 - George
2个回答

4

我使用了这段代码来更改默认的侧边栏设置:

extension UISplitViewController {
    open override func viewDidLoad() {
        super.viewDidLoad()

        self.preferredDisplayMode = .secondaryOnly
        self.preferredSplitBehavior = .overlay
    }
}

self 暴露了几个可以使用的侧边栏方法和属性。希望这对你有用!


0

所以这不是一个好的长期解决方案,但如果你像我一样,绝对需要本地方法在这里工作,那么可以通过以下方式进行黑客攻击。使用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
}

这个代码虽然脆弱,但它能够正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接