SwiftUI iOS14-导航视图+;列表-韩元';t填充空间

SwiftUI iOS14-导航视图+;列表-韩元';t填充空间,swift,swiftui,swiftui-list,ios14,swiftui-navigationview,Swift,Swiftui,Swiftui List,Ios14,Swiftui Navigationview,自从iOS 14更新后,导航视图中的列表出现问题 下面是一个简单的代码分解——我已经将所有没有显示问题的代码条带化了 struct ContentView: View { var views = ["Line 1", "Line 2", "Line 3"] var body: some View { NavigationView {

自从iOS 14更新后,导航视图中的列表出现问题

下面是一个简单的代码分解——我已经将所有没有显示问题的代码条带化了

struct ContentView: View {
    
    var views = ["Line 1", "Line 2", "Line 3"]
    
    var body: some View {
        
        NavigationView {
            
            VStack {
                
                List {
                    
                    ForEach(views, id: \.self) { view in
                       
                        VStack {
                        Text("\(view)")
                        }
                        .background(Color.red)
                        
                    }
                    
                }
                
            }
            
        }
        
    }
}
这将产生以下结果:

我不明白为什么列表会像那样悬停在导航视图的中心。据我所知,这将生成一个占用所有可用空间的listview(navigationbar所在的顶部除外)

事实上,在iOS 13.5上运行时,我得到的结果如下图所示:

我已经通读了文档,但不明白为什么会突然发生这种行为

任何帮助都将不胜感激

谢谢你的问题 在某些情况下,iOS 14中的
列表
导航视图
的默认样式可能与iOS 13中的不同

解决方案#1-显式listStyle 它不再总是
PlainListStyle
(如iOS 13中的那样),有时也是
InsetGroupedListStyle

您需要将
listStyle
显式指定为
PlainListStyle

.listStyle(PlainListStyle())
例如:

struct ContentView: View {
    var views = ["Line 1", "Line 2", "Line 3"]

    var body: some View {
        NavigationView {
            VStack {
                List {
                    ForEach(views, id: \.self) { view in
                        VStack {
                            Text("\(view)")
                        }
                        .background(Color.red)
                    }
                }
                .listStyle(PlainListStyle()) // <- add here
            }
        }
    }
}
struct ContentView: View {
    var views = ["Line 1", "Line 2", "Line 3"]

    var body: some View {
        NavigationView {
            VStack {
                List {
                    ForEach(views, id: \.self) { view in
                        VStack {
                            Text("\(view)")
                        }
                        .background(Color.red)
                    }
                }
            }
        }
        .navigationViewStyle(StackNavigationViewStyle()) // <- add here
    }
}
例如:

struct ContentView: View {
    var views = ["Line 1", "Line 2", "Line 3"]

    var body: some View {
        NavigationView {
            VStack {
                List {
                    ForEach(views, id: \.self) { view in
                        VStack {
                            Text("\(view)")
                        }
                        .background(Color.red)
                    }
                }
                .listStyle(PlainListStyle()) // <- add here
            }
        }
    }
}
struct ContentView: View {
    var views = ["Line 1", "Line 2", "Line 3"]

    var body: some View {
        NavigationView {
            VStack {
                List {
                    ForEach(views, id: \.self) { view in
                        VStack {
                            Text("\(view)")
                        }
                        .background(Color.red)
                    }
                }
            }
        }
        .navigationViewStyle(StackNavigationViewStyle()) // <- add here
    }
}
struct ContentView:View{
变量视图=[“第1行”、“第2行”、“第3行”]
var body:一些观点{
导航视图{
VStack{
名单{
ForEach(视图,id:\.self){view in
VStack{
文本(“\(视图)”)
}
.背景(颜色.红色)
}
}
}
}

.navigationViewStyle(StackNavigationViewStyle())//您好,谢谢。我不想隐藏导航栏。事实上,导航栏根本不是问题。我的问题是列表应该占据屏幕上所有可用的空间。但它只占iOS14上的一小部分中间部分,如上图所示。我相信列表应该在水平和垂直方向上填充视图基于上述代码(在ios 13.5上也是如此)我用更多的图片更新了我的问题,再次感谢大家的支持help@swift--帮助谢谢,这是因为
VStack
。我更新了我的答案。@swift--帮助哦,我现在明白你想要什么了-请查看更新的答案。@koen在上面的例子中,当包装在VStack中时,
List
List+ForEach
带有插入。只有删除VStack或设置
。listStyle
才能显式删除插入。不幸的是,当
InsetGroupedListStyle
是默认样式时,它还没有很好的文档记录。我花了一天时间对此进行故障排除。谢谢你的提问