UITableViewCell 中嵌套的 UIStackViews,会减慢滚动速度,降低性能。如何提高性能?
Posted
技术标签:
【中文标题】UITableViewCell 中嵌套的 UIStackViews,会减慢滚动速度,降低性能。如何提高性能?【英文标题】:Nested UIStackViews in UITableViewCell, slows down the scrolling, reduce performance. How do I improve performance? 【发布时间】:2016-08-03 12:02:47 【问题描述】:我在我的UITableViewCell
中使用嵌套的UIStackViews
。但是,当我滚动时它非常慢并且极大地影响了性能。有什么方法可以提高UITableViewCell
中嵌套UIStackViews
的性能?
这就是我将堆栈添加到我的UITableViewCell
的方式:
let verticalStack = UIStackView()
verticalStack.axis = .Vertical
for i in 0..<json["Rows"].arrayValue.count
let horizontalStack = UIStackView()
horizontalStack.axis = .Horizontal
for j in 0..<json["Rows"][i]["Column"].arrayValue.count
let label = UILabel()
label.text = "Test"
horizontalStack.addArrangedSubview(label)
verticalStack.addArrangedSubview(horizontalStack)
cell.addSubview(verticalStack)
【问题讨论】:
你是如何创建单元格的?尝试异步填充单元格 异步填充单元格?它是如何工作的? 您可以考虑“分析应用程序”。按住 Xcode 中的运行按钮以启动分析器。选择时间分析器,然后记录应用程序,看看哪些代码行很慢。 堆栈视图只计算其排列的子视图的布局约束,因此它们本身不应该影响性能。另一方面,如果您非常频繁地运行上面的代码,您可能会因此而变慢。这段代码什么时候执行?多久一次? 【参考方案1】:问题是,您在出队时分配了多个 UILabel。因此,每次滚动时,都会创建新标签。
通常,您不应该在cellForRowAtIndexPath
中执行高性能操作(如分配)。
更好的方法是一次性创建所有标签并重复使用它们。
如果你有固定数量的标签,你可以直接将它们作为排列好的子视图添加到 XIB 文件中(或最初在单元类中),这样它们将被重用。
【讨论】:
以上是关于UITableViewCell 中嵌套的 UIStackViews,会减慢滚动速度,降低性能。如何提高性能?的主要内容,如果未能解决你的问题,请参考以下文章
UITableViewCell中嵌套UICollectionView
FetchedResultsController 并在一个 UITableViewCell 中显示来自 3 个嵌套实体的数据
UITableViewCell嵌套UICollectionView滑动错乱问题
UITableViewCell嵌套UIWebView并且cell根据webView的内容自适应