Как создать коллекционное представление с динамической высотой в соответствии с содержанием в нем? - PullRequest
0 голосов
/ 10 января 2019

Код Соуса: Мой код

Мне нужно создать макет, имеющий динамический размер по тексту разной длины, для этого с использованием collectionview внутри ячейки tableview

Я создал пользовательский коллекционный вид с ячейкой собственного коллекционного вида. Я использовал CustomFlowLayout (подкласс UICollectionViewLayout) с методом подготовки к переопределению, чтобы вычислить размер каждой ячейки.

Я могу получить динамический размер ячейки collectionview, теперь мне нужно сделать динамическую высоту collectionview на основе размера ее содержимого, так как на данный момент я взял высоту contratraint collectionview и установил ее как 200 фиксированной.

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

Ниже приведен скриншот того, чего я хочу достичь, большое спасибо!

DynamicContentSize

Ответы [ 3 ]

0 голосов
/ 10 января 2019

Попробуйте настроить высоту просмотра вашей коллекции, используя

if heightConstraint.constant != collectionView.contentSize.height {
    heightConstraint.constant = collectionView.contentSize.height
    view.updateConstraintsIfNeeded()
}

И вы можете установить высоту строки в табличном представлении автоматически. если ваши ограничения соблюдены, ячейка таблицы автоматически отрегулирует свою высоту

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableView.automaticDimension
}
0 голосов
/ 10 января 2019

Я уже ответил на этот вопрос здесь: https://stackoverflow.com/a/53102033/7388630

Вы можете получить полностью рабочий и объясненный пример кода здесь

0 голосов
/ 10 января 2019

В вашем CustomFlowLayout, который является подклассом UICollectionViewLayout, вам необходимо переопределить collectionViewContentSize, как показано ниже.

Подсчитайте высоту содержимого и верните его.

override public var collectionViewContentSize: CGSize {
    return CGSize(width: collectionViewWidth, height: contentHeight)
}

Надеюсь, это поможет!

...