我在SwiftUI MacOS(Catalina)上使用了NavigationView,由于某种原因,在实际选择NavigationLink之前,局部视图及其分隔线是部分可见的。理想情况下,我希望隐藏细节视图,直到选择列表中的某些内容为止。
我已经在所有视图上尝试了minWidth的各种组合,但无法正确显示它:
这里是我的主视图:
var body: some View {
VStack {
NavigationView {
List(networkManager.FileList!.items) { file in
NavigationLink(destination: FileDetail(fileDetail: file)) {
FileRow(fileRow: file)
}
}
}.frame(minHeight:300).background(Color.white)
}
}
这是我的行视图:
var fileRow: Item
var body: some View {
VStack(alignment: .leading) {
HStack {
Text(fileRow.name).font(Font.system(size: 12, weight: .regular, design: .default))
Text(fileRow.path).font(Font.system(size: 12, weight: .regular, design: .default))
}
}
}
这是我的详细信息视图:
var fileDetail: Item
var body: some View {
HStack {
VStack {
Text(fileDetail.name).font(.title)
Text(fileDetail.created).font(Font.system(size: 12, weight: .regular, design: .default))
}.background(Color.white).frame(minWidth:250, idealWidth:300, maxHeight: .infinity)
}
}
答案 0 :(得分:1)
在macOS NavigationView
上具有主/从样式,因此即使未提供任何细节,它也会添加一些隐式。
这是可能的解决方案。
并非所有提供的从属实体都已在某些复制代码上进行了测试。 Xcode 11.4 / macOS 10.15.5。
var body: some View {
VStack {
NavigationView {
List(items) { file in
NavigationLink(destination: FileDetail(fileDetail: file)) {
FileRow(fileRow: file)
}
}
// add explicit stub view for details pane
// on no selection with zero width
Rectangle().frame(maxWidth: 0, maxHeight: .infinity)
}.frame(minHeight:300).background(Color.white)
}
}