NavigationSplitView:在三列视图中隐藏详细信息列

问题描述 投票:0回答:1

我正在使用 SwiftUI 创建 macOS 应用程序,并使用

NavigationSplitView
创建三列布局。似乎侧边栏(或第一列或前导列)默认可以隐藏。我也希望能够选择隐藏详细信息列(或第三列或尾随列),我在许多 macOS 应用程序中都看到过这种情况(甚至在 Xcode 本身中)。
苹果的文档似乎只有
NavigationSplitView
配置来隐藏侧边栏或侧边栏+内容列,但没有详细信息列。

这是我当前的代码,我在其中创建了一个隐藏详细视图内容的工具栏按钮:

import SwiftUI

struct NavigationView: View {
    @State private var detailViewVisible: Bool = true
    
    var body: some View {
        NavigationSplitView {
            Text("Sidebar")
        } content: {
            Text("Content")
        } detail: {
            if detailViewVisible {
                Text("Detail")
            } else {
                EmptyView()
            }
        }
        .toolbar {
            ToolbarItem(placement: .primaryAction) {
                Button(action: {
                    detailViewVisible.toggle()
                }) {
                    Image(systemName: "sidebar.right")
                }
            }
        }
    }
}

这会清空详细视图列的内容,但列本身仍然保留。

我还尝试将该列的

width
设置为
0
,这似乎也没有任何作用。

swift macos swiftui navigation swiftui-navigationsplitview
1个回答
0
投票

这对我有用(需要 macOS 13 或更高版本):

NavigationSplitView {
    Text("Sidebar")
} content: {
    Text("Content")
} detail: {
    if detailViewVisible {
        Text("Detail")
    } else {
        Spacer()
            .navigationSplitViewColumnWidth(0)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.