如果超过视图高度,SwiftUI + ScrollView 无法添加视图

Posted

技术标签:

【中文标题】如果超过视图高度,SwiftUI + ScrollView 无法添加视图【英文标题】:SwiftUI + ScrollView not able to add views if it's exceed view height 【发布时间】:2020-01-01 10:34:40 【问题描述】:

我试图在一个视图中显示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 不允许添加更多组件,它有什么好处?

【问题讨论】:

记录在案的 SwiftUI 限制,只需将您的 Text(或其他视图)嵌入到 Group 中 10 个(或更少)项 很伤心,顺便感谢您提供的信息。 【参考方案1】:

您需要使用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)
        
    

【讨论】:

我想知道为什么 ScrollView 的视图不能超过 10 个,我遇到的错误是编译器错误extra arguments at positions #11, #12, #13 in cal,只是为了让 Google 可以发现它。感谢您的解决方案!

以上是关于如果超过视图高度,SwiftUI + ScrollView 无法添加视图的主要内容,如果未能解决你的问题,请参考以下文章

在Scroll View的高度动画后,UIScrollView的子视图不响应触摸

SwiftUI 中的列表视图占据整个屏幕高度

使用better-scroll在vue中封装自己的Scroll组件

如何在 SwiftUI 中使视图的高度从 0 动画到高度?

SwiftUI - 如何从不同的视图中获取 GeometryReader 的大小/高度?

SwiftUI:超过 4 个组合的文本视图不能与视图修饰符一起使用