- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我将 UICollectionView 与 AutoSizing 单元格一起使用,它看起来类似于 UITableView。
如前几个问题所述:q1 , q2采用 Self-Sizing 单元格需要实现 preferredLayoutAttributesFitting(_:)
方法,以便在 systemLayoutSizeFitting(_ targetSize:)
的帮助下应用尺寸调整。
然而,在最近的 WWDC session ( High Performance Auto Layout ) 中,有人提到,使用 systemLayoutSizeFitting(_ targetSize:)
是昂贵的,因为它会创建一个新的 AutoLayout 引擎,之后会丢弃它,需要它解决所有约束,而不缓存先前计算的结果。
在我的应用程序中,我以答案中建议的方式实现了 self 调整大小。然而,在类似表格的列表中滚动性能很糟糕(许多行高度很小)。
很明显,在 UICollectionViewCell
中调用 systemLayoutSizeFitting(_ targetSize:)
只是为了计算它的大小是昂贵的并且对 CPU 造成负担(因为大小估计和实际布局发生在主线程上)。
同时实现以下结果的推荐方法是什么
UICollectionView 宽度减去边距
?同时拥有自动调整单元格和高滚动性能的推荐策略是什么?
最佳答案
通过向基类添加宽度约束来修复。由于 preferredLayoutAttributesFitting
方法仅用于更新首选宽度。
updateConstraints
方法在集合滚动期间不会每次都被调用,这可以防止约束流失:
import UIKit
import SnapKit
class AutoSizingCellBase: UICollectionViewCell {
override class var requiresConstraintBasedLayout: Bool {
return true
}
private var widthConstraint: Constraint?
override func updateConstraints() {
if widthConstraint == nil {
if let window = window {
let width = window.bounds.width - 16
contentView.snp.makeConstraints { (make) in
widthConstraint = make.width.equalTo(width).constraint
}
}
}
super.updateConstraints()
}
}
此外,由于 updateConstraints
方法是在 View 添加到层次结构之后调用的,因此可以将单元格限制到 superview
。
关于ios - AutoSizingCells preferredLayoutAttributesFitting 性能 [WWDC 2018],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50799447/
我将 UICollectionView 与 AutoSizing 单元格一起使用,它看起来类似于 UITableView。 如前几个问题所述:q1 , q2采用 Self-Sizing 单元格需要实现
我正在使用 UICollectionView 和 AutoSizingCells 功能。 问题 1当我将此方法与 estimatedItemSize 结合使用并尝试调用 reloadData() 时,
我是一名优秀的程序员,十分优秀!