列表不滚动(在 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)时消失,为啥?
带有 ObservableObject 的 SwiftUI - 包含 NavigationLink 的列表以在滚动时下载它的详细信息不出现