列表不滚动(在 SwiftUI 中——为了消除其他问题的歧义)

Posted

技术标签:

【中文标题】列表不滚动(在 SwiftUI 中——为了消除其他问题的歧义)【英文标题】:List not scrolling (in SwiftUI -- to disambiguate from other questions) 【发布时间】:2020-07-09 17:06:56 【问题描述】:

使用 SwiftUI,我有一个从 CoreData 检索到的项目列表。我读到的所有内容看起来都应该是我可以正常滚动的列表,但是在模拟器和 iPad 上运行时,列表都不会滚动。

很明显有一些东西丢失了,但我似乎找不到它是什么。该列表填充正确,但它根本不会滚动。

struct PeopleList : View     
    @Environment(\.managedObjectContext) var managedObjectContext
     
     @FetchRequest(
        entity: Person.entity(),
         sortDescriptors: [
            NSSortDescriptor(keyPath: \Person.lastName, ascending: true),           
            NSSortDescriptor(keyPath: \Person.firstName, ascending: true)
         ]
     ) var people: FetchedResults<Person>
    
    var body: some View 
        ZStack(alignment: .topLeading) 
            List(self.people, id: \.self)  person in
                Text(person.descriptionForList())                                             
                                       
        
        .frame(width: 400, height: 200)
        .modifier(RoundedEdge(width: 4, color: Color(red: 0.6, green: 0.6, blue: 0.6), cornerRadius: 10))
        .padding(10)
    

没有任何改变的事情:

删除 ZStack 用简单的List(0...100, id: \.self) item in Text("hey \(item)") 替换列表——仍然不会滚动。 将.frame() 添加到 List() 本身。 (添加)删除 .frame .modifier.padding 都没有取得任何成果。

这不是关于(以下主题有问答解决它们,但不是这个问题):

程序化滚动 禁用滚动 滚动指示器 滚动视图 UIKit

我如何追踪可能阻止 List() 滚动的原因?

【问题讨论】:

RoundedEdge 修饰符是什么?您是否也尝试将其删除? 在没有 RoundedEdge 的情况下重新创建并且滚动对我有用 Person 是否包含唯一字段,例如ID?您是否尝试使用唯一标识符而不是 self?例如List(self.people, id: \.id) person in 注释掉了.modifier(RoundedEdge()),没有变化。该列表填充得很好,当我将列表简单地作为数字 1...100 时,同样的行为,所以也不认为这是 .id 的问题。显示此结构的视图可能存在问题... 【参考方案1】:

事实证明,问题不在于上面提出的结构中的任何内容;这一切都与使用该结构的视图有关。具体来说,当Color()(甚至是.opacity(0))位于ZStack 位于List()“上方”时,后者停止滚动。显示正常,但不会滚动。

This question 描述了同样的事情发生,尽管情况有些不同。

我会留下这个问题,因为其他人可能和我在同一个地方,“为什么我的 List() 不滚动?”,而不是“为什么我的 List() 不在 ZStack 中滚动?”希望 Swift 13 之后的版本能够解决这个问题!

【讨论】:

以上是关于列表不滚动(在 SwiftUI 中——为了消除其他问题的歧义)的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI在iOS14+中消除List列表项四周间距的方法

对 SwiftUI 中水平滚动视图内的列表不起作用的操作

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

带有 ObservableObject 的 SwiftUI - 包含 NavigationLink 的列表以在滚动时下载它的详细信息不出现

SwiftUI 在列表滚动期间停止更新

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