1

我正在尝试使用 SwiftUI 在 macOS 上创建主/详细视图。当主/详细视图首次呈现时,我希望它立即“突出显示”/“导航到”它的第一个条目。

换句话说,我想立即呈现以下内容:master/detail 第一行突出显示

我在 macOS 上使用NavigationViewandNavigationLink来呈现主/详细视图:

struct ContentView: View {

  var body: some View {
    NavigationView {
      List {
        NavigationLink(destination: Text("detail-1").frame(maxWidth: .infinity, maxHeight: .infinity)) {
          Text("link-1")
        }
        NavigationLink(destination: Text("detail-2").frame(maxWidth: .infinity, maxHeight: .infinity)) {
          Text("link-2")
        }
      }
    }
  }
}

我尝试使用提供的 theisActivetag/selection选项,但NavigationLink没有成功。我可能在这里缺少什么?有没有办法使用 SwiftUI 强制关注第一个主/细节元素?

4

1 回答 1

0

我最近遇到了这个问题,在被困在同一点之后,我发现Apple 的教程表明你不在NavigationLinkmacOS 上使用。

相反,您只需NavigationView使用 aList和 DetailView 创建一个。然后您可以绑定List's 的选择,它可以正常工作。

亮点似乎仍然存在错误。NavigationView解决方法是在出现后的下一个运行循环中设置选择。:/

这是一个完整的例子:

enum DetailContent: Int, CaseIterable, Hashable {
    case first, second, third
}
extension DetailContent: Identifiable {
    var id: Int { rawValue }
}

struct DetailView: View {
    @Binding var content: DetailContent?

    var body: some View {
        VStack {
            Text("\(content?.rawValue ?? -1)")
        }
            .frame(maxWidth: .infinity, maxHeight: .infinity)
    }
}

struct MainView: View {
    @State var detailContent: DetailContent?

    var body: some View {
        NavigationView {
            List(selection: $detailContent) {
                Section(header: Text("Section")) {
                    ForEach(DetailContent.allCases) { item in
                        Text("\(item.rawValue)")
                            .tag(item)
                    }
                }
            }
                .frame(minWidth: 250, maxWidth: 350)
                .listStyle(SidebarListStyle())
            if detailContent != nil {
                DetailView(content: $detailContent)
            }
        }
            .frame(maxWidth: .infinity, maxHeight: .infinity)
            .onAppear {
                DispatchQueue.main.async {
                    self.detailContent = DetailContent.allCases.randomElement()
                }
            }
    }
}
于 2020-05-13T09:31:53.573 回答