UICollectionView Self Sizing Cells - PullRequest
       5

UICollectionView Self Sizing Cells

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

Итак, я пытаюсь выяснить, как изменить размер ячеек представления коллекции. Итак, у меня есть ViewController, и я перетащил collectionView внутри ViewController. Я не использую файл XIB, я использую прототип ячейки. Теперь я не могу понять, как самостоятельно измерить ячейку. Это не так просто, как представление таблицы. Я попробовал следующее, что нашел.

if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {

        layout.estimatedItemSize = CGSize(width: view.frame.width, height: 100)
        layout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
    }

Затем я нашел еще одну, которая создает пустышку, которая выглядит примерно так. Это приводит к сбою моего приложения.

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    let frame = CGRect(x: 0, y: 0, width: view.frame.width, height: 50)
    let dummyCell = CommentCell(frame: frame)
    let comment = comments[indexPath.item]
    print(comment.text)

    dummyCell.comment = comment
    dummyCell.layoutIfNeeded()

    let targetSize = CGSize(width: view.frame.width, height: 1000)
    let estimateSize = dummyCell.systemLayoutSizeFitting(targetSize)
    let height = max(45 + 8 + 8, estimateSize.height)
    return CGSize(width: view.frame.width, height: height)

}

Так что мне нужен контроллер представления коллекции вместо контроллера представления. Как бы я мог самостоятельно изменять размер ячеек без использования collectionViewController или nib-файла? Спасибо

1 Ответ

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

Предполагая, что у вас есть ограничения в ячейке NIB / прототип, вы хотите установить itemSize в .automaticSize:

if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
    layout.estimatedItemSize = CGSize(width: view.frame.width, height: 100)
    layout.itemSize = UICollectionViewFlowLayout.automaticSize
}

Вы не поделились тем, где вы устанавливаете это, но если сделать это в viewDidLoad, view.frame.width может оказаться не тем, что вы думаете. Вы захотите перепроверить, что ...

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