SwiftUI-ScrollView的宽度为0,我的内容不可见

时间:2020-01-10 18:16:42

标签: swift swiftui

我试图将滚动视图用于可滚动的内容,但是每当将视图嵌套在滚动视图中时,我都注意到,堆栈中的视图消失回到视图层次结构中,并且屏幕上看不到任何内容。我还看到,每当我使用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。

enter image description here

2 个答案:

答案 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
                ...
            }
        }
    }
}