问题
我希望能够根据侧边栏选择来更改导航视图中的列数。也就是说,大多数视图将具有所需的3列布局(侧栏>列表>详细信息),但其中一个视图将有两个列布局(侧栏>详细信息)。我试图直接在导航视图的顶层设置它,但是这并没有改变任何事情。
NavigationView{
SidebarView()
if selection != .explore {
ListView()
}
DetailView()
}在上面的例子中,如果选择是“探索”,那么应该只有一个侧边栏和一个详细视图。
对于如何实现这一点,有什么想法吗?
复制代码
我希望"searchView“占据全部宽度。意味着应该只显示一个侧栏和搜索视图。
在macOS或iPadOS上运行
import SwiftUI
enum SidebarSelection {
case library
case notes
case search
}
struct ContentView: View {
@State var selection : SidebarSelection? = SidebarSelection.library
var body: some View {
NavigationView {
List {
NavigationLink(destination: ListView(), tag: SidebarSelection.library, selection: $selection){
Label("Library", systemImage: "book")
}
.tag(SidebarSelection.library)
NavigationLink(destination: ListView(), tag: SidebarSelection.notes, selection: $selection){
Label("Notes", systemImage: "doc.text")
}
.tag(SidebarSelection.notes)
NavigationLink(destination: SearchView(), tag: SidebarSelection.search, selection: $selection){
Label("Search", systemImage: "magnifyingglass")
}
.tag(SidebarSelection.search)
}
.listStyle(SidebarListStyle())
Text("List View")
if selection != .search {
Text("Detail View")
}
}
}
}
struct ListView: View {
var body: some View{
List {
ForEach(0..<10){ index in
NavigationLink(destination: Text("DetailView: \(index)")){
Text("Link to \(index) detail view")
}
}
}
}
}
struct SearchView: View {
var body: some View {
Text("Full width search view")
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}发布于 2022-09-14 03:42:37
实际上,您可以做的非常简单,要实现这一点,您只需对SwiftUI更加具体,并使用@ViewBuilder属性包装器即可。
struct ContentView: View {
@ViewBuilder
var body: some View {
if(twoColumns == true){
NavigationView{
SidebarView()
DetailView()
}
} else {
NavigationView{
SidebarView()
ListView()
DetailView()
}
}
}
}https://stackoverflow.com/questions/66196886
复制相似问题