gpt4 book ai didi

ios - 在 CollectionView 中估计单元格高度的更快方法

转载 作者:可可西里 更新时间:2023-11-01 00:39:05 25 4
gpt4 key购买 nike

我的 UICollectionView 中有一个无限滚动,我注意到我估计单元格高度的方式是我的 Collection View 的瓶颈。当我滚动我的 Collection View 时,它会导致一些长时间的延迟。

是否有更好的方法来估算我的单元格的高度?

单元格具有不同的高度,因为我在每个单元格中都有一个 UILabel。我为这些 UILabel 分配了一个不同长度的 NSMutableAttributedStrings:

let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .justified
paragraphStyle.lineSpacing = 5.0

let attributedText = NSMutableAttributedString(string: " \(post.caption)", attributes: [NSAttributedStringKey.font: UIFont.systemFont(ofSize: 15), .paragraphStyle: paragraphStyle, .baselineOffset: NSNumber(value: 0)])

attributedText.append(NSAttributedString(string: "\n\n", attributes: [NSAttributedStringKey.font: UIFont.systemFont(ofSize: 4)]))

let timeAgoDisplay = post.creationDate.timeAgoDisplay()
attributedText.append(NSAttributedString(string: timeAgoDisplay, attributes: [NSAttributedStringKey.font: UIFont.systemFont(ofSize: 14), NSAttributedStringKey.foregroundColor: UIColor.storiesLightGray()]))

captionLabel.attributedText = attributedText

我的sizeForItemAt 方法。我注意到,一旦我的 Collection View 中有 200 多个项目,调用 dummyCell.layoutIfNeeded() 会使我的应用程序变得非常慢:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

var height: CGFloat = 180

let frame = CGRect(x: 0, y: 0, width: view.frame.width, height: height)
let dummyCell = HomePostCell(frame: frame)

dummyCell.post = presenter.posts[indexPath.item]
dummyCell.layoutIfNeeded()

let targetSize = CGSize(width: view.frame.width, height: 5000)
let estimatedSize = dummyCell.systemLayoutSizeFitting(targetSize)

let newHeight = max(height, estimatedSize.height)

return CGSize(width: view.frame.width, height: newHeight)
}

谢谢!

最佳答案

理想情况下,您不应在 sizeForItemAt 中使用 systemLayoutSizeFitting,因为正如您所说,它很慢。

您可以预缓存一些单元格数据,计算大小,然后将它们存储在数组或类似的数组中,这样 sizeForItemAt 只需在数组中进行查找——速度很快。

而且您实际上也不需要使用 systemLayoutSizeFitting;您可以使用您对标签尺寸和内容的了解来计算尺寸(例如,使用 NSAttributedString 测量方法)。

这就是我们在 systemLayoutSizeFitting 或自动布局存在之前所做的事情,而且速度仍然快得多。

关于ios - 在 CollectionView 中估计单元格高度的更快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50518955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com