首页 > 解决方案 > 如果超过视图高度,SwiftUI + ScrollView 无法添加视图

问题描述

我试图Text在一个视图中显示组件的所有属性。Text以不同的样式和字体显示。为此,我Text在一个视图中添加了多个组件。

为了使它成为可能,我正在使用该ScrollView组件并在其中添加所有Text组件。在某些时候,它不允许我在 scrollView 中再添加一个组件,并且每次都显示不同的错误。

代码:

struct TextClass: View {
    var body: some View {
        GeometryReader { geometry in
            ScrollView(.vertical, showsIndicators: false) {
                Text("This is suppose to be a really long text that can go on to multiple lines. By default, it could go more than one lines.").padding()

                Text("This is only one line regardless of how long the sentence is")
                    .padding()
                    .lineLimit(1)
                Text("Hello Swift - LargeTitle").font(.largeTitle).padding()
                Text("Hello Swift - Title").font(.title).padding()
                Text("Hello Swift - Headline").font(.headline).padding()
                Text("Hello Swift - SubHeadline").font(.subheadline).padding()
                Text("Hello Swift - body").font(.body).padding()
                Text("Hello Swift- callout").font(.callout).padding()
                Text("Hello Swift- Footnote").font(.footnote).padding()

                Text("Font Weight - Ultralight").fontWeight(.ultraLight).padding()
                Text("Font Weight - Thin").fontWeight(.thin).padding()
    //            Text("Font Weight - light").fontWeight(.light).padding()
    //            Text("Font Weight - Regular").fontWeight(.regular).padding()
            }.frame(width: geometry.size.width)
        }
    }
}

struct TextClass_Previews: PreviewProvider {
    static var previews: some View {
        TextClass()
    }
}

它显示如下错误:

在此处输入图像描述

如果我评论行

Text("Font Weight - Thin").fontWeight(.thin).padding()

错误消失了。

在这种情况下,它似乎只允许我添加 10 个Text组件如果我添加的组件超过了它会给我一个错误。

它是一个错误吗?这是 SwiftUI 中的常见行为吗?如果 scrollView 不允许添加更多组件,它有什么好处?

标签: swifttextscrollviewswiftuigeometryreader

解决方案


您需要使用Group,因为视图中的元素不能超过 10 个

struct TextClass: View {
    var body: some View {
        GeometryReader { geometry in
            ScrollView(.vertical, showsIndicators: false) {
                    Group {
                            Text("This is suppose to be a really long text that can go on to multiple lines. By default, it could go more than one lines.").padding()
                            Text("This is only one line regardless of how long the sentence is")
                                .padding()
                                .lineLimit(1)
                            Text("Hello Swift - LargeTitle").font(.largeTitle).padding()
                            Text("Hello Swift - Title").font(.title).padding()
                            Text("Hello Swift - Headline").font(.headline).padding()
                            Text("Hello Swift - SubHeadline").font(.subheadline).padding()
                            Text("Hello Swift - body").font(.body).padding()
                    }
                    Group {
                            Text("Font Weight - Ultralight").fontWeight(.ultraLight).padding()
                            Text("Font Weight - Thin").fontWeight(.thin).padding()
                            Text("Font Weight - light").fontWeight(.light).padding()
                            Text("Font Weight - Regular").fontWeight(.regular).padding()
                    }
            }.frame(width: geometry.size.width)
        }
    }
}

推荐阅读