【发布时间】:2021-01-04 16:27:51
【问题描述】:
最初,我想在 ScrollView 中显示字母 A 和 B,并让用户滚动查看其他字母。但是,即使我将父 VStack 限制为高度为 120 的框架,您也可以看到 ScrollView 之外的字母 C(如蓝色背景所示)。代码如下:
var body: some View {
VStack(alignment: .leading, spacing: 0) {
HStack(alignment: .center , spacing: 5) {
Text("Letter").font(.tableHeader).frame(width: 75, height: 30, alignment: .center)
} // HStack
.frame(width: 195, height: 50, alignment: .center)
.background(Color.green)
VStack(alignment: .leading, spacing: 0) {
GeometryReader { outsideProxy in
ScrollView (.vertical, showsIndicators: false) {
ZStack(alignment: .top) {
GeometryReader { insideProxy in
Color.clear
// get offset
} // GeometryReader inside
VStack(alignment: .leading, spacing: 10) {
HStack(alignment: .center, spacing: 5){
Text("A").font(.tableData).frame(width: 75, height: 50, alignment: .center)
}
HStack(alignment: .center, spacing: 5){
Text("B").font(.tableData).frame(width: 75, height: 50, alignment: .center)
}
HStack(alignment: .center, spacing: 5){
Text("C").font(.tableData).frame(width: 75, height: 50, alignment: .center)
}
HStack(alignment: .center, spacing: 5){
Text("D").font(.tableData).frame(width: 75, height: 50, alignment: .center)
}
} // VStack
} // ZStack
} // Scrollview
} // GeometryReader outside
.background(Color.blue)
} // VStack
.frame(width: 195, height: 120, alignment: .leading)
} // VStack
}
完整的代码需要使用 GeometryReader(因此需要使用 ZStack),这就是我将这些项目留在上面示例中的原因。
解决此问题的最佳方法是什么?对上述布局编码的任何改进持开放态度。请记住,最终,我希望用户能够单击 A、B、C 或 D 以转到导航堆栈中的下一个视图。
【问题讨论】:
标签: view swiftui scrollview frame