Внутренний контент CollectionViewSize возвращает разные высоты в разное время - PullRequest
0 голосов
/ 10 октября 2019

У меня есть ячейка tableView, которая содержит collectionView. В collectionView должно отображаться облако тегов (простая метка с фоном и рамкой). Количество тегов может варьироваться, что означает, что высота collectionView может варьироваться. Я пытаюсь визуализировать высоту ячейки tableView на основе intrinsicContentSize.height из collectionView.

Пока все хорошо. Однако я получаю разные высоты от collectionView в разное время. К сожалению, последняя высота, которую я получаю, неверна (слишком высока), и поэтому ячейка tableView оказывается слишком высокой.

Я создал пример проекта, который доступен здесь . Ниже показано, как выглядит пример проекта.

enter image description here

Здесь я вычисляю высоту ячейки tableView, которая всегда возвращает неверное значение высоты:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return data[indexPath.row].returnHeight()
}

struct MyData {
    var title = String()
    var tokenStrings = [String]()
    var collectionViewHeight = CGFloat()

    func returnHeight() -> CGFloat {
        var height = CGFloat()
        let topBottomMargin: CGFloat = 24
        let titleHeight: CGFloat = 18
        let tagsMargin: CGFloat = 16

        let cell = TableViewCell()
        cell.configure(with: self)

        height += cell.collectionView.intrinsicContentSize.height
        height += topBottomMargin
        height += titleHeight
        height += tagsMargin
        return height
    }
}

Здесь я настраиваю ячейку collectionView, которая в какой-то момент жизненного цикла (я не уверен, почему) возвращает правильное значение, но затем, наконец, возвращает слишком высокое значение:

func configure(with data: MyData) {
    self.data = data
    self.collectionView.reloadData()
    self.collectionView.layoutIfNeeded()
}

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

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