Ответ 1
Хорошо, я решил это, кэшируя высоты ячеек в sizeThatFits и возвращая это значение для оцениваемых высот ячеек в пределах делегата. Прекрасно работает.
Вот как я устанавливаю свою таблицу:
self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds];
self.tableView.delegate = self;
self.tableView.dataSource = self;
self.tableView.estimatedRowHeight = 150;
[self.view addSubview:self.tableView];
В моих ячейках я вызываю - (CGSize)sizeThatFits:(CGSize)size
, чтобы программно вернуть высоту (которая установлена в - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
. Я не использую ограничения или автозапуск.
Ничто сложное, и мои высоты все прекрасно выглядят визуально.
Однако проблема заключается в том, что я нажимаю новый контроллер представлений, ячейки меняются/меняются визуально (вверх или вниз). Кажется, что это прыжок, основанный на вычислении оцененных значений высоты строки, но размерThatFits также вызывается для каждой видимой ячейки перед переключением, поэтому я действительно запутался (не уверен, почему либо нужно вообще называть, так как я покидаю Посмотреть). Я проверил contentOffset для tableView - он не изменился, поэтому это не проблема.
Хорошо, я решил это, кэшируя высоты ячеек в sizeThatFits и возвращая это значение для оцениваемых высот ячеек в пределах делегата. Прекрасно работает.
Быстрое исправление:
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
self.tableView.reloadData()
}
Изменить. Потратив часы на эту и подобные проблемы, я нашел, что лучшим решением является кеширование высот ячеек и возврат их в методе delegiedHeightForRowAtIndexPath, проблема связана с тем, что оцененные высоты действительно неточны.
Я кэшировал высоты в таблицеView (_: willDisplayCell: forRowAtIndexPath:) в словарь с уникальным идентификатором для данных в виде ключей таким образом, когда данные добавляются или обновляются. Я могу просто удалить эту высоту из кеша и использовать более оцененные высоты, так что только эта ячейка использует ориентировочную высоту. Пока это решает все мои проблемы с прыжками и прокруткой.