LazyVStack 和 SwiftUI 的性能不佳问题
Posted
技术标签:
【中文标题】LazyVStack 和 SwiftUI 的性能不佳问题【英文标题】:Bad Performance issue for LazyVStack , SwiftUI 【发布时间】:2020-10-05 11:08:34 【问题描述】:我有一个大约 100 行的视图:
ForEach(moodEntries.reversed(), id: \.self) entry in
Button(action:
self.activeMoodForModal = moodEntries.lastIndex(of: entry) ?? 0
self.showMoodModal.toggle()
)
MoodTableViewCard(entry: entry)
.sheet(item: $activeMoodForModal) item in
MoodEntryModalView(entry: moodEntries[item], saveNote:
do
try context.save()
catch
print(error)
)
性能真的很差:当我打开这个视图时,整个应用程序在模拟器上冻结了 3 秒。如果我将 ForEach
更改为 List
一切正常,所以我想延迟加载会解决我的问题。但是我不想弄乱List,所以我尝试将上面提到的所有代码放在LazyVStack
中,但这没有帮助:代码的性能和以前一样糟糕。 LazyVStack
真的比 List
差那么多吗?还是我做错了什么?
【问题讨论】:
您会准备最小的可重现示例吗?可以肯定地说 - 将.sheet
移出动态内容,因为现在您拥有与 moodEntries
计数一样多的工作表。
【参考方案1】:
LazyVStack
确实不重用单元格,所以无论你做什么 - 它仍然会在滚动时滞后。如果您的元素多于屏幕,并且布局比Text("Hello")
复杂,请使用List
。
【讨论】:
这对于 LazyVStack 来说是有意义的,但是 LazyHStack 仍然存在同样的问题。以上是关于LazyVStack 和 SwiftUI 的性能不佳问题的主要内容,如果未能解决你的问题,请参考以下文章