【问题标题】:Toggle Sidebar in Code using SwiftUI NavigationView on iPad在 iPad 上使用 SwiftUI NavigationView 在代码中切换侧边栏
【发布时间】:2021-02-04 08:50:05
【问题描述】:

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

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

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

self.presentationMode.wrappedValue.dismiss()

我已经看到了很多 ma​​cOS 的解决方案:

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

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

【问题讨论】:

  • 我也有类似的问题,链接here。最后我只是决定制作自己的自定义侧边栏,这并不理想,但对我来说是最好的解决方案。
  • 谢谢,如果下周还没有解决方案,我还是自己实现吧。
  • 您找到解决方案了吗?
  • @NitricWare 我没有,没有

标签: swift swiftui ipados


【解决方案1】:

所以这不是一个好的长期解决方案,但如果您像我一样并且 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
}

这是BRITTLE,但它有效。

【讨论】:

    【解决方案2】:

    我使用此代码更改了默认侧边栏设置:

    extension UISplitViewController {
        open override func viewDidLoad() {
            super.viewDidLoad()
    
            self.preferredDisplayMode = .secondaryOnly
            self.preferredSplitBehavior = .overlay
        }
    }
    

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

    【讨论】:

      猜你喜欢
      • 2020-08-29
      • 2021-05-01
      • 1970-01-01
      • 2021-02-10
      • 2021-03-21
      • 2021-09-15
      • 1970-01-01
      • 2021-09-22
      • 2019-11-24
      相关资源
      最近更新 更多