- Published on
记录一个iOS和macOS使用导航的区别
- Authors
- Name
- sakuragi
记录一个iOS和macOS使用导航的区别
iOS的用法
List {
ForEach(groupedArticles.indices, id: \.self) { index in
let header = (groupedArticles[index].first?.typeName()) ?? ""
Section(header: Text(header)) {
ForEach(groupedArticles[index], id: \.id) { article in
NavigationLink(value: article) {
ArticleItemView(article: article)
}
}
}
}
}
.navigationTitle("跟打")
.navigationDestination(for:Article.self) { article in
TypingView(article:article)
.toolbar(.hidden, for: .tabBar)
}
macOS的用法
List(selection: $selected) {
ForEach(groupedArticles.indices, id: \.self) { index in
let header = (groupedArticles[index].first?.typeName()) ?? ""
Section(header: Text(header)) {
ForEach(groupedArticles[index], id: \.self) { article in
ArticleItemView(article: article)
}
}
}
}
其中的区别是在List中是否需要传 selection,如果是通过NavigationLink的方式,不需要传 selection参数。因为其中的选中项的处理是由 NavigationLink + navigationDestination来决定的
如果在macOS中,不使用NavigationLink,我们采用的是NavigationSplit方案,如果我们的List是处于其中的ContentView,我们会通过selection来决定NavigationSplit中的detailView中的数据。
所以需要传入selection。
如果我们在iOS的方案中,不小心也传入了selection,那么会导致NavigationLink + navigationDestination 这套机制不生效。从而导致在iOS上点击List中的Item不跳转的情况。