SwiftUI:如何让滚动视图包含完整列表长度

Posted

技术标签:

【中文标题】SwiftUI:如何让滚动视图包含完整列表长度【英文标题】:SwiftUI: How to get scrollview to contain full list length 【发布时间】:2020-01-22 01:00:35 【问题描述】:

我有一个滚动视图,其中包含一个 vstack,其中包含一些文本和一个列表。列表独立于滚动视图滚动,导致文本成为列表标题的效果。我想让滚动视图改为完全展开列表,以便所有内容一起滚动。

ScrollView 
                VStack(alignment: .leading) 
                    Text(self.person.name)

                    Text(self.person.email)
                        .font(.subheadline)
                        .padding(.top)

                    Text(self.person.about)
                        .foregroundColor(.secondary)
                        .padding()

                    List 
                        Section 
                            ForEach(self.friends, id: \.id)  friend in
                                Text(friend.name)
                            
                        
                    
                    Spacer()
                 
                .padding()

            

这是我滚动列表时得到的:

【问题讨论】:

【参考方案1】:

您在这里有效地获得了两个 ScrollView。您需要使用单个 List 并将其他项目放置为 Section 标头。不幸的是,List 似乎并不像 UITableView 那样支持整个视图的标题。

    var body: some View 
        List 
            Section(header:
                VStack(alignment: .leading) 
                    Text(self.person.name)

                    Text(self.person.email)
                        .font(.subheadline)
                        .padding(.top)

                    Text(self.person.about)
                        .foregroundColor(.secondary)
                        .padding()
                
            ) 
                ForEach(self.friends, id: \.id)  friend in
                    Text(friend.name)
                
            
        
    

编辑:也许您甚至没有在寻找标题?在这种情况下,只需将您想要的内容放在ForEach 上方即可。

    var body: some View 
        List() 
            Section 

                VStack(alignment: .leading) 
                    Text(self.person.name)

                    Text(self.person.email)
                        .font(.subheadline)
                        .padding(.top)

                    Text(self.person.about)
                        .foregroundColor(.secondary)
                        .padding()
                

                ForEach(self.friends, id: \.id)  friend in
                    Text(friend.name)
                
            
        
    

这是有标题和没有标题的结果:

【讨论】:

以上是关于SwiftUI:如何让滚动视图包含完整列表长度的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 TextEditor 在 SwiftUI 中滚动?

如何在 SwiftUI 中制作水平列表?

在 SwiftUI 列表/表单中禁用滚动

如何使 SwiftUI 滚动视图缩小到内容?

SwiftUI 中的底部优先滚动

滚动视图中的内容作为列表项在滚动(swiftui)时消失,为啥?