【问题标题】:iPadOS - Close sidebar programmatically in SwiftUIiPadOS - 在 SwiftUI 中以编程方式关闭侧边栏
【发布时间】:2022-03-05 00:31:46
【问题描述】:

我正在使用 SwiftUI 制作一个在 iOS 和 iPadOS 中完美运行的应用程序,但是在 iPad 中,当我使用 .navigationViewStyle(DoubleColumnNavigationViewStyle()) 修饰符时会出现一个侧边栏在我的NavigationView 中,我想知道是否有办法以编程方式关闭侧边栏,通常用户可以通过触摸屏幕左上角的按钮来关闭侧边栏,但这是用户交互。可以直接在代码中关闭侧边栏吗?

发现 SwiftUI-Introspect 可以用来完成这个需求,但我想在没有外部库的情况下做到这一点。

这是在 iPadOS 中重现侧边栏的简单代码:

import SwiftUI
@main
struct MyApp: App {
    var body: some Scene {
        WindowGroup {
            NavigationView {
                if UIDevice.current.userInterfaceIdiom == .pad {
                    Text("Sidebar here")
                    Text("Content here")
                }
            }.navigationViewStyle(DoubleColumnNavigationViewStyle())
        }
    }
}

【问题讨论】:

    标签: ipad swiftui sidebar


    【解决方案1】:

    我尝试了这段代码,它成功了:

    import SwiftUI
    
    struct TestView: View {
        static var uiSplitViewController: UISplitViewController? = nil
        
        var body: some View {
            NavigationView {
                Text("Sidebar")
            
                VStack {
                    Button(action: {
                        TestView.uiSplitViewController?.hide(.primary)
                    }, label: {
                        Text("Hide")
                    })
                    
                    Button(action: {
                        TestView.uiSplitViewController?.show(.primary)
                    }, label: {
                        Text("Show")
                    })
                }
            }
            
        }
    }
    
    extension UISplitViewController {
        open override func viewDidLoad() {
            super.viewDidLoad()
            
            if (TestView.uiSplitViewController == nil) {
                TestView.uiSplitViewController = self
            }
        }
    }
    

    我不知道这是否正确。我所做的是扩展UISplitViewController 并将其实例保存在视图中,以便我可以使用它来隐藏或显示侧边栏。希望对你有用!

    【讨论】:

      猜你喜欢
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-05
      • 1970-01-01
      • 2020-05-24
      • 1970-01-01
      相关资源
      最近更新 更多