gpt4 book ai didi

ios - 具有自动调整单元格 (estimatedSize) 和 sectionHeadersPinToVisibleBounds 的 UICollectionView 变得精神起来

转载 作者:IT王子 更新时间:2023-10-29 05:31:55 36 4
gpt4 key购买 nike

考虑以下情况。我有一个 UICollectionView(在 UICollectionViewController 内),它看起来和 UITableView 几乎一样(我不使用 UITalbeView 的原因 是因为我在布局上有非数据 View ,我不想管理和弄乱我的 IndexPath)。为了实现自动调整单元格大小,我设置了 estimatedItemSize,类似这样:

layout.estimatedItemSize = CGSize(width: self.view.bounds.size.width, height: 72)

另外,在我的单元格中我有布局属性:

override func preferredLayoutAttributesFitting(_ layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes {
layoutAttributes.bounds.size.height = systemLayoutSizeFitting(UILayoutFittingCompressedSize).height
return layoutAttributes
}

因此,通过这样做,我得到了与具有自动调整大小的 UITableView 一样的精确布局。它完美地工作。

现在,我正在尝试添加页眉并将其固定在滚动到该部分的顶部,如下所示:

layout.sectionHeadersPinToVisibleBounds = false

但是布局进入了奇怪的状态,我到处都是故障,单元格相互重叠,标题有时不粘。

更新:

view controller和cell的代码:

class ViewController: UICollectionViewController {

override func viewDidLoad() {
super.viewDidLoad()
let layout = collectionView?.collectionViewLayout as! UICollectionViewFlowLayout
layout.sectionHeadersPinToVisibleBounds = true
layout.estimatedItemSize = CGSize(width: collectionView?.bounds.size.width ?? 0, height: 36) // enables dynamic height
}

override func numberOfSections(in collectionView: UICollectionView) -> Int {
return 10
}

override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 10
}

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! CustomCell
cell.heightConstraint.constant = CGFloat(indexPath.row * 10 % 100) + 10 // Random constraint to make dynamic height work

return cell
}

override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
return collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "Header", for: indexPath)
}

class CustomCell : UICollectionViewCell {
let identifier = "CustomCell"

@IBOutlet weak var rectangle: UIView!
@IBOutlet weak var heightConstraint: NSLayoutConstraint!

override func awakeFromNib() {
translatesAutoresizingMaskIntoConstraints = false
}

override func preferredLayoutAttributesFitting(_ layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes {
layoutAttributes.bounds.size.height = systemLayoutSizeFitting(UILayoutFittingCompressedSize).height
return layoutAttributes
}

Animation of result

视频滞后详情:https://vimeo.com/203284395

最佳答案

WWDC 2017 更新:

我的同事在 WWDC 2017 上,他向一位 UIKit 工程师询问了这个问题。工程师确认此问题是 Apple 已知的错误,目前没有修复。

关于ios - 具有自动调整单元格 (estimatedSize) 和 sectionHeadersPinToVisibleBounds 的 UICollectionView 变得精神起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41897391/

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