У меня проблемы с настройкой collectionview внутри tableviewcell с высотой, равной collectionView's contentSize.Я знаю, что UICollectionView не сможет использовать преимущества повторного использования, но это тот пользовательский интерфейс, которого я пытаюсь достичь (Проверьте вложения).
Сложность состоит в том, что collectionView занимает 0,6 от области tableViewCell (ширина AutoLayout), однако высота является динамической с количеством ячеек, которые может вместить вид коллекции (минимальная ширина ячейки равна 60, а максимальная ширина ячейки = 100).
Таким образом, вычисление высоты CollectionView зависит от ширины из autolayout.
Так как ширина представления коллекции будет известна во время layoutSubview, я инициализировал heightConstraint с фиктивной высотой 150 (я могу ошибатьсяздесь) и сбросить его (деактивировать ограничение, изменить постоянную на текущее значение, снова активировать ограничение) на фактическое вычисленное значение позже в layoutSubviews.В результате я получаю высоту 150 изначально, тогда как при прокрутке высота отображается правильно.
TLDR;Я хочу использовать autolayout, чтобы установить ширину коллекции, но высота коллекции зависит от количества ячеек, которые оно может вместить для своей ширины, чего я не могу достичь в том же цикле выполнения.: /
Перед прокруткой
После прокрутки
Фрагменты кода:
_filesCollectionView.filesCollectionViewHeightConstraint = NSLayoutConstraint.init(item: _filesCollectionView, attribute: .height, relatedBy: .greaterThanOrEqual, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: 150)
NSLayoutConstraint.activate([_filesCollectionView.filesCollectionViewHeightConstraint])
_filesCollectionView.mas_makeConstraints { (make) in
make?.left.equalTo()(self.dividerView.mas_right)?.offset()(10)
make?.right.equalTo()(self.contentView)?.with().offset()(-10)
make?.top.equalTo()(self.contentView)?.with().offset()(10)
make?.bottom.equalTo()(self.contentView)?.with().offset()(-10)
}
Фрагмент LayoutSubview:
let heightOffset = self.computeNewHeight()
if(filesCollectionViewHeightConstraint.constant != 150) {
NSLayoutConstraint.deactivate([filesCollectionViewHeightConstraint])
filesCollectionViewHeightConstraint.constant = heightOffset == 0 ? 30 : heightOffset
NSLayoutConstraint.activate([filesCollectionViewHeightConstraint])
}
ps Я установил делегатов Tableview для возврата autoDimension,