在我的应用中,我有一个集合视图,其中的单元格水平自动调整。 这是一些代码:
// called in viewDidLoad()
private func setupCollectionView() {
let cellNib = UINib(nibName: SomeCell.nibName, bundle: nil)
collectionView.register(cellNib, forCellWithReuseIdentifier: SomeCell.reuseIdentifier)
guard let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout else { return }
flowLayout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
flowLayout.itemSize = UICollectionViewFlowLayout.automaticSize
}
单元格具有1个视图,该视图具有高度约束。此视图子视图一个标签,该标签限制为2行且不受宽度限制。这里的想法是允许标签在2行中计算其自己的宽度适合文本。
为了完成这项工作,我在单元格类中添加了以下代码:
override func awakeFromNib() {
super.awakeFromNib()
contentView.translatesAutoresizingMaskIntoConstraints = false
contentView.leftAnchor.constraint(equalTo: leftAnchor).isActive = true
contentView.rightAnchor.constraint(equalTo: rightAnchor).isActive = true
contentView.topAnchor.constraint(equalTo: topAnchor).isActive = true
contentView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
}
现在,它可以完美运行了。单元格为autosizng,scrollView为水平滚动等。直到我至少调用一次reloadData()
为止。然后,单元格的尺寸为50x50,在我离开屏幕并再次返回之前,再也不会自动调整尺寸了。
您对为什么会发生有任何想法吗?