UITableViewCell не изменит размер после добавления подвида

У меня есть UITableView, который я настроил для динамического роста в зависимости от содержимого, установив:

tableView.estimatedRowHeight = 100
tableView.rowHeight = UITableViewAutomaticDimension

Мой UITableView состоит из headerView и bodyView, в которые я вставляю другие подвиды после настройки.

Я настроил свои ячейки со следующим rx:

viewModel
   .map { $0.cellViewModels }
   .bind(to: tableView.rx.items(cellIdentifier: "MyCell", cellType: MyCell.self)) { [unowned self] (row, viewModel, cell) in
        cell.viewModel = viewModel
        // Tried adding the following with no luck:
        self.tableView.beginUpdates()
        self.tableView.endUpdates()
   }
   .disposed(by: disposeBag)

метод viewModel ячейки вызывает метод setup() с его didSet следующим образом:

var viewModel: CellViewModel? {
    didSet { setup() }
}

В моей настройке я добавляю подвид к bodyView моей ячейки в зависимости от некоторых других факторов. т.е. я могу добавить картинку, немного текста и т.д.

Проблема в том, что когда я добавляю свое подпредставление в bodyView моей ячейки, высота ячейки остается исходной высоты, которая была в xib, и не меняет размер в этой точке, чтобы приспособить новое представление. Я пытался вызвать self.layoutIfNeeded() после добавления подвида, но безуспешно. Как я могу изменить размер своей ячейки после добавления в нее подвида?


person Brejuro    schedule 18.09.2018    source источник
comment
Вы проверили ограничения своей ячейки?   -  person Alexkater    schedule 18.09.2018
comment
@Alexkater Да, не похоже, что есть какие-то проблемы с ограничениями.   -  person Brejuro    schedule 18.09.2018
comment
tableView.reloadRows(at: [indexPath], with: .automatic) Это работает для меня   -  person Alexkater    schedule 18.09.2018
comment
@Brejuro Добавляете ли вы ограничения в новое подпредставление? Функция автоматического изменения размера UITableView использует ограничения для определения желаемой высоты ячейки, поэтому без ограничений изменение размера не произойдет.   -  person tomahh    schedule 19.09.2018


Ответы (1)


Вы можете позвонить tableView.beginUpdates(), а затем tableView.endUpdates(). Без чего-либо между ними.

person André Slotta    schedule 18.09.2018
comment
Это будет после добавления подвида, верно? Попытка подумать, есть ли хороший способ для моего класса tableView узнать, когда моя ячейка закончила добавлять подпредставления. Я добавил его в строки после установки модели представления ячейки, но без изменений. - person Brejuro; 18.09.2018
comment
@Brejuro, нет ничего плохого в том, что ваш tableView, владеющий своими ячейками, знает об их расположении и жизненном цикле, это кажется почти необходимым. Похоже, вы должны использовать начальные и конечные обновления в своем операторе привязки после настройки модели. - person inokey; 18.09.2018
comment
@inokey Спасибо, inokey, я пытался добавить это, но результат тот же. - person Brejuro; 18.09.2018