Я хочу автоматически изменить размер моей ячейки моего коллекционного представления в соответствии с содержимым. Когда я щелкаю по ячейке, создается впечатление, что моя ячейка изменяет размеры дважды.
Что я сделал:
https://imgur.com/a/05C7kzj
Мой код:
MainViewController.swift
override func viewDidLoad() {
super.viewDidLoad()
if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
layout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
}
}
Также я попробовал это без удачи:
override func viewDidLoad() {
super.viewDidLoad()
if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout,
let collectionView = collectionView {
let width = (collectionView.frame.width - 70) / 1.9
let height = (collectionView.frame.height - 100) / 10
layout.estimatedItemSize = CGSize(width: width, height: height)
}
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let width = view.frame.size.width - 40
let height = (view.frame.size.height - 100) / 6
let layout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
layout.itemSize = CGSize(width: width, height: height)
if indexPath.section == 1 {
let width = (view.frame.size.width - 70) / 1.9
let height = (view.frame.size.height - 100) / 10
let layout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
layout.itemSize = CGSize(width: width, height: height)
return layout.itemSize
}
if indexPath.section == 2 {
let width = (view.frame.size.width - 70) / 1.9
let height = (view.frame.size.height - 100) / 10
let layout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
layout.itemSize = CGSize(width: width, height: height)
return layout.itemSize
}
return layout.itemSize
}
MyBusinessCell.swift:
override func preferredLayoutAttributesFitting(_ layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes {
setNeedsLayout()
layoutIfNeeded()
let size = contentView.systemLayoutSizeFitting(layoutAttributes.size)
var frame = layoutAttributes.frame
frame.size.height = ceil(size.height)
layoutAttributes.frame = frame
return layoutAttributes
}
PS: я думаю, что изменение размера работает, но почему делает это дважды?