UICollectionView в UItableViewCell, макет просмотра сетки - PullRequest
0 голосов
/ 01 октября 2018

У меня проблемы с настройкой collectionview внутри tableviewcell с высотой, равной collectionView's contentSize.Я знаю, что UICollectionView не сможет использовать преимущества повторного использования, но это тот пользовательский интерфейс, которого я пытаюсь достичь (Проверьте вложения).

Сложность состоит в том, что collectionView занимает 0,6 от области tableViewCell (ширина AutoLayout), однако высота является динамической с количеством ячеек, которые может вместить вид коллекции (минимальная ширина ячейки равна 60, а максимальная ширина ячейки = 100).

Таким образом, вычисление высоты CollectionView зависит от ширины из autolayout.

Так как ширина представления коллекции будет известна во время layoutSubview, я инициализировал heightConstraint с фиктивной высотой 150 (я могу ошибатьсяздесь) и сбросить его (деактивировать ограничение, изменить постоянную на текущее значение, снова активировать ограничение) на фактическое вычисленное значение позже в layoutSubviews.В результате я получаю высоту 150 изначально, тогда как при прокрутке высота отображается правильно.

TLDR;Я хочу использовать autolayout, чтобы установить ширину коллекции, но высота коллекции зависит от количества ячеек, которые оно может вместить для своей ширины, чего я не могу достичь в том же цикле выполнения.: /

Перед прокруткой enter image description here

После прокрутки After scrolling

Фрагменты кода:

_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,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...