我正在swiftui中创建我的水平滚动视图,但是无论何时尝试使用它,我都可以上下拉动滚动视图中的子视图,当它第一次加载时,顶部,中间和底部也有空白edgesignore(.all)无法正常工作。请参见下面的代码和图像。我该如何摆脱这个空白,而又不允许将顶部的蓝色视图拉起来?
var body: some View {
GeometryReader { geometry in
ZStack{
VStack {
ZStack{
ScrollView (.horizontal, showsIndicators: true) {
HStack(spacing: 0){
Group{
Color(.blue)
Color(.red)
Color(.green)
}.frame(width: geometry.size.width, height: geometry.size.height * 0.52)
}
}//end of scroll\view
.frame(width: geometry.size.width, height: geometry.size.height * 0.52)
} .frame(width: geometry.size.width, height: geometry.size.height * 0.52)
.edgesIgnoringSafeArea(.all)
ZStack{
Color(.orange)
}//end of second ZStack
.frame(width: geometry.size.width, height: geometry.size.height * 0.48)
}
}.edgesIgnoringSafeArea(.all)
}
}
答案 0 :(得分:1)
您必须考虑以下因素来重构代码:
只需将VStack Spacing设置为0,视图将不再在其垂直轴上滚动。您可以通过将两个框架的高度都增加到100%以上来进行检查,它将再次开始滚动
重构ZStack并根据上下堆栈设置EdgeIgnoringSafeArea。请记住,在SwiftUI中检查ViewModifiers的正确顺序很重要。
var body:某些视图{
GeometryReader {中的几何
VStack(spacing:0) {
ZStack {
Color(.orange)
.edgesIgnoringSafeArea(.top)
ScrollView (.horizontal, showsIndicators: true) {
HStack(spacing:0){
Group{
Color(.blue)
Color(.red)
Color(.green)
}
.frame(width: geometry.size.width, height: geometry.size.height * 0.52)
}
}
}
ZStack{
Color(.orange)
.edgesIgnoringSafeArea(.bottom)
.frame(width: geometry.size.width, height: geometry.size.height * 0.48)
}
}
}
}
它适用于XCode 11.3。