【问题标题】:Bad Performance issue for LazyVStack , SwiftUILazyVStack 和 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 计数一样多的工作表。

标签: ios swift swiftui swiftui-list


【解决方案1】:

LazyVStack 确实重用单元格,所以无论你做什么 - 它仍然会在滚动时滞后。如果您的元素多于屏幕,并且布局比Text("Hello") 复杂,请使用List

【讨论】:

  • 这对于 LazyVStack 来说是有意义的,但是 LazyHStack 仍然存在同样的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-23
  • 1970-01-01
相关资源
最近更新 更多