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

Posted

技术标签:

【中文标题】SwiftUI - ScrollView 的宽度为 0,我的内容不可见【英文标题】:SwiftUI - ScrollView has 0 width and my content is not visible 【发布时间】:2020-01-10 18:16:42 【问题描述】:

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

【问题讨论】:

你不应该关心ScrollView的内部实现。如果您构建正确的内容,它就会起作用。 问题不在于您提供给我们的代码... 【参考方案1】:

如果您不想使用GeometryReader,只需像这样插入具有正确宽度的零高度视图

var body: some View 
    ScrollView 
        VStack 
            Color.clear
                .frame(maxWidth: .infinity, maxHeight: 0)
            ForEach(...)  each in
                ...
            
        
    

【讨论】:

【参考方案2】:

虽然不是一个完美的解决方案,但您可以使用 GeometryReader 将滚动视图的框架设置为与其父视图相同的宽度。

NavigationView 

    GeometryReader geometry in

        ScrollView(.vertical) 

            // TODO: Add content

        
        .frame(width: geometry.size.width)

    


此解决方法的灵感来自 Rob Mayoff's answer 在另一个问题上。

【讨论】:

以上是关于SwiftUI - ScrollView 的宽度为 0,我的内容不可见的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:如何将 ScrollView 的位置设置为左上角? (两个滚动都已启用)

ScrollView 内容未填写 SwiftUI

ScrollView 中的初始 SwiftUI 动画

如何缩放 SwiftUI 列表行高以匹配列表的宽度

在 ScrollView 中将文本对齐为前导 - SWIFTUI

Swiftui Scrollview Viewmodifier 适用于所有 Scrollview