Как обновить TableView и его родительский ScrollView Height в соответствии с его содержимым - PullRequest
0 голосов
/ 02 июня 2018

У меня есть UITableView, для которого не включена прокрутка, и он существует в UIScrollView.Я делаю это таким образом, так как спецификации дизайна требуют чего-то похожего на tableView.Ячейка TableView, имеющая динамическую высоту. Поэтому я использую

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

    return UITableViewAutomaticDimension
}

Теперь, когда я извлекаю данные из API и перед перезагрузкой TableView.

Я обновляю ограничение высоты как tableView, так и ScrollView.Но высота не получает обновления.Я использовал следующий код

self.view.layoutIfNeeded()
tvHeightConstraint.constant = tvPrdtDetail.contentSize.height
svHeightConstraint.constant = tvPrdtDetail.contentSize.height + 8

Здесь tvHeightConstraint и svHeightConstraint - ограничение высоты tableView и ScrollView

@IBOutlet weak var tvHeightConstraint: NSLayoutConstraint!
@IBOutlet weak var svHeightConstraint: NSLayoutConstraint!

В журнале всегда отображается 0 при печати TableView ContentSize

  print("Content Size: \(tvPrdtDetail.contentSize.height)")

Пожалуйста, помогите мне.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

Попробуйте эту надежду, чтобы это сработало. Вызывайте это, когда вам нужно обновить ограничение, и override updateConstraints function

self.layoutIfNeeded()

override public func updateConstraints() {
    super.updateConstraints()
    tvHeightConstraint.constant = tvPrdtDetail.contentSize.height
    svHeightConstraint.constant = tvPrdtDetail.contentSize.height + 8
}
0 голосов
/ 02 июня 2018

Порядок, такой как вызов layoutIfNeeded, должен быть после обновления констант ограничений

tvHeightConstraint.constant = tvPrdtDetail.contentSize.height 
svHeightConstraint.constant = tvPrdtDetail.contentSize.height + 8  //  remove this 
self.view.layoutIfNeeded()

Также нет необходимости во 2-й строке, как если бы вы правильно перехватывали ограничения в просмотре прокрутки сверху внизОбновление ограничения высоты таблицы обновит представление прокрутки

Редактировать:

1 - дать ограничение высоты таблицы, скажем 3000 (некоторое большое число), за которым следует self.view.layoutIfNeeded()

2 - перезагрузить таблицу

3 - получить y-кадр последней ячейки

4 - присвоить его ограничению по высоте

5 - расположить макетпросмотр

сделать это после того, как вы получите данные

...