Так что я использую композиционный макет для автоматического изменения размера ячейки. Вот как я создаю свой раздел макета. Затем я возвращаю его в UICollectionViewCompositionalLayout (sectionProvider:).
}
private func whatsNewSection() -> NSCollectionLayoutSection {
let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1), heightDimension: .estimated(80))
let item = NSCollectionLayoutItem(layoutSize: itemSize)
let group = NSCollectionLayoutGroup.vertical(layoutSize: itemSize, subitems: [item])
let section = NSCollectionLayoutSection(group: group)
section.contentInsets = NSDirectionalEdgeInsets(top: 0, leading: 24, bottom: 24, trailing: 24)
section.boundarySupplementaryItems = [
.init(layoutSize: .init(widthDimension: .fractionalWidth(1), heightDimension: .absolute(50)), elementKind: UICollectionView.elementKindSectionHeader, alignment: .top)
]
return section
}
Так что этот раздел выглядит примерно так:

Сейчас У меня есть 2 файла пера, каждый из которых имеет свой класс. Заголовок раздела имеет только метку и кнопку. Давайте проигнорируем заголовок, потому что проблема заключается в WhatsNewCell. Файл класса выглядит примерно так:
class WhatsNewCell: UICollectionViewCell {
static let reuseIdentifier = String(describing: WhatsNewCell.self)
var delegate: WhatsNewCellDelegate?
@IBOutlet weak var appVersionLabel: UILabel!
@IBOutlet weak var appUpdateLabel: UILabel!
@IBOutlet weak var moreButton: UIButton!
override func awakeFromNib() {
super.awakeFromNib()
moreButton.addTarget(self, action: #selector(handleMore), for: .touchUpInside)
}
@objc private func handleMore() {
self.moreButton.setTitle("", for: .normal)
self.appUpdateLabel.numberOfLines = 0
delegate?.moreButtonClick()
}
}
Хорошо, поэтому метка версии и метка обновления находятся в виде стека. Когда пользователь нажимает кнопку, я меняю количество строк для метки обновления. Теперь я создал делегата под названием WhatsNewCellDelegate, чтобы иметь возможность перезагрузить представление моей коллекции из моего контроллера. Вот так я перезагружаю свою коллекцию в моем контроллере. Также я установил делегат ячейки на мой контроллер при инициализации ячейки.
extension AppDetailCollectionVC: WhatsNewCellDelegate {
func moreButtonClick() {
//collectionView.collectionViewLayout.invalidateLayout()
collectionView.performBatchUpdates({
//collectionView.reloadData()
collectionView.reloadSections(IndexSet(integer: 2))
}, completion: nil)
}
}
Теперь это работает, когда я вызываю данные перезагрузки, но не работает, когда я вызываю перезагрузку. разделы. Мне нужно дважды нажать кнопку «больше», чтобы она работала с разделами перезагрузки. Также я попытался использовать invalidateLayout (), но это заставляет некоторые мои клетки исчезать. Посмотрите на снимки экрана ниже.

Вот как это выглядит, когда я нажимаю кнопку «more» с помощью invalidateLayout ().

Так что я не знаю, что происходит. Как бы я мог перезагрузить раздел, не нажимая кнопку больше дважды. Буду очень признателен за помощь.