我试图将滚动视图用于可滚动的内容,但是每当将视图嵌套在滚动视图中时,我都注意到,堆栈中的视图消失回到视图层次结构中,并且屏幕上看不到任何内容。我还看到,每当我使用ScrollView时,它都会添加另一个Hosting View Controller,并且我不知道这是否是正常行为。
var body: some View {
NavigationView {
ScrollView(.vertical, showsIndicators: false) {
VStack {
ForEach(bookLibrary.indices, id: \.self) { index in
HStack {
ForEach(self.bookLibrary[index], id: \.self) { book in
BookView(book: book)
}
}
}
}
}
}
}
获取此视图层次结构。您还可以看到HostingScrollView的宽度为0。
答案 0 :(得分:0)
虽然不是完美的解决方案,但是您可以使用GeometryReader来将滚动视图的框架设置为与其超级视图相同的宽度。
NavigationView {
GeometryReader {geometry in
ScrollView(.vertical) {
// TODO: Add content
}
.frame(width: geometry.size.width)
}
}
此变通办法是受Rob Mayoff's answer在另一个问题上的启发。
答案 1 :(得分:0)
如果您不想使用GeometryReader
,只需插入具有正确宽度的零高度视图即可
var body: some View {
ScrollView {
VStack {
Color.clear
.frame(maxWidth: .infinity, maxHeight: 0)
ForEach(...) { each in
...
}
}
}
}