List 中的可重用性支持 - SwiftUI
Posted
技术标签:
【中文标题】List 中的可重用性支持 - SwiftUI【英文标题】:Reusability support in List - SwiftUI 【发布时间】:2021-07-27 06:30:03 【问题描述】:我目前正在开发一个使用 SwiftUI 的项目。我试图使用List
来显示一个包含 10 个项目的列表。
问题:List
是否像UITableview
一样支持可重用性?
我浏览了多个帖子,所有帖子都说List
支持可重用性。
Does the List in SwiftUI reuse cells similar to UITableView?
但项目的内存映射说明了其他内容。 List
中的所有视图都是一次性创建的,不会重复使用。
编辑:
这是我创建List
的方法
List
Section(header: TableHeader())
ForEach(0..<10) _ in
TableRow()
TableHeader
和 TableRow
是创建的自定义视图。
有人可以澄清一下吗?
【问题讨论】:
能否请您添加您如何使用列表的代码? @RajaKishan 我已经添加了代码。 @PGDev 做一件事添加 100 行然后检查。 你试过LazyVStack
developer.apple.com/documentation/swiftui/lazyvstack吗?
@Kawa 在LazyVStack
中,视图被延迟渲染。但它不支持可重用性概念。例如,如果我需要呈现 1000 个项目并滚动到最后一个项目,那么内存中将有 1000 个项目持续存在,这会影响性能。
【参考方案1】:
List 实际上为可重用标识符提供了与 UITableView 相同的技术。您的代码使它像一个滚动视图。 正确的做法是提供项目作为迭代数据。
struct Item: Identifiable
var id = UUID().uuidString
var name: String
@State private var items = (1...1000).map Item(name: "Item \($0)")
...
List(items)
Text($0.name)
查看层次结构调试器仅显示内存中的 17 行
【讨论】:
这在内存中显示17行的依据是什么? 我的模拟器屏幕上显示了 17 行。 能否请您尝试增加行的高度,然后检查在内存中创建了多少行。以上是关于List 中的可重用性支持 - SwiftUI的主要内容,如果未能解决你的问题,请参考以下文章
使用 XCTestCases 类中的可访问性标识符访问 NavigationLink - SwiftUI
使用 XCUIElementQuery 在 SwiftUI 中查找嵌入在表单中的 DatePicker() 的可访问性(标识符:)