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()
        
    

TableHeaderTableRow 是创建的自定义视图。

有人可以澄清一下吗?

【问题讨论】:

能否请您添加您如何使用列表的代码? @RajaKishan 我已经添加了代码。 @PGDev 做一件事添加 100 行然后检查。 你试过LazyVStackdeveloper.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() 的可访问性(标识符:)

SwiftUI 中类型的可组合性

如何停止 UIPickerView 的可重用性

SwiftUI 中免费的可扩展 List 有啥要求?

SwiftUI 列表中的可编辑文本字段