iPadOS - SwiftUI中如何以编程方式关闭侧边栏

6
我正在开发一款使用SwiftUI的应用,它在 iOS 和 iPadOS 上运行得非常完美。但是在 iPad 上,当我在我的NavigationView中使用.navigationViewStyle(DoubleColumnNavigationViewStyle())修饰符时,会出现一个侧边栏。我想知道是否有一种方法可以通过编程方式关闭侧边栏。通常情况下,用户可以通过触摸屏幕左上角的按钮来关闭侧边栏,但这需要用户操作。是否可能直接在代码中关闭侧边栏?
我发现SwiftUI-Introspect可以用来实现这个需求,但我希望不使用外部库也能完成。
以下是一个简单的代码示例,可以重现在上的侧边栏:
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())
        }
    }
}
1个回答

3

我尝试了这段代码,它可以工作:

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,并将其实例保存在视图中,以便我可以使用它来隐藏或显示侧边栏。希望这能有所帮助!


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