Пользовательский UIView в ячейках UITableView с включенным UITableViewAutomaticDimension

Я имею UITableView с UITableViewAutomaticDimension и немного estimatedRowHeight, Для этой таблицы я использую обычай UITableViewCell который содержит некоторые метки и обычай UIView с переопределением intrinsicContentSize(), Настройка ограничений правильная, и таблица может определить фактическую высоту для каждой строки. Все идет нормально.

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

var internalSize: CGSize = ...

override func intrinsicContentSize() -> CGSize {
    return internalSize
}

override func layoutSubviews() {
    super.layoutSubviews()
    fitIntoWidth(frame.size.width)
}

private func fitIntoWidth(width: CGFloat) {
    let height = // calculate based on content and width
    internalSize = CGSizeMake(width, height)
    invalidateIntrinsicContentSize()
}

Теперь, когда я заполняю табличное представление, intrinsicContentSize() возвращает желаемое значение, но оно не подходит для текущего макета, затем управление переходит к layoutSubviews() где размер пересчитывается и система снова вызывает intrinsicContentSize() и теперь он возвращает хорошее значение. Однако первая таблица загружает данные и высоты ячеек, рассчитанные на основе неверных intrinsicContentSize() ценности. Если я позвоню reloadData() снова все становится хорошо, и расположение также хорошо для всех последующих ячеек в таблице.

Где моя ошибка и как изменить код, чтобы размер ячеек работал правильно без вызова reloadData() дважды?

0 ответов

Другие вопросы по тегам