Самостоятельные калибровки делают переход UITableView

У меня есть UITableView, каждая ячейка имеет изображение и две метки, как вы можете видеть на первом снимке

enter image description here

Итак, я пытаюсь использовать ячейки для самостоятельной калибровки, и все отлично, за исключением двух вещей:

1) Первая и вторая ячейки не отображают контент должным образом, но после прокрутки вниз и последующего возврата к ним все в порядке. Я попытался использовать [tableview reloadData] в viewDidApper, но это не помогает. Смотреть этикетки сначала не подходят. Вы можете посмотреть его на этом видео https://www.youtube.com/watch?v=I9DGBl1c5vg

Посмотрите на метки в первой ячейке.

2) Это тяжело. Я прокручиваю таблицу, и все отлично, но проблема возникает, когда я выбираю строку. Это подталкивает меня к подробному представлению, но когда я нажимаю "назад" и возвращаюсь к главному виду, табуляция перескакивает, поэтому я возвращаюсь не к выбранной строке, также если я прокручиваю таблицу, она не прокручивается гладко, но прыжки. Вот ссылки для двух видеороликов, первая показывает, что свиток является гладким https://www.youtube.com/watch?v=9wAICcZwfO4, если я не перехожу к подробному представлению, а второй показывает проблему с прыжком https://www.youtube.com/watch?v=fRcQ3Za1wDM.

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

Ответ 1

Хорошо, я решил обе проблемы.

Вопрос 1

Я добавил эти две строки

[cell.contentView setNeedsLayout];
[cell.contentView layoutIfNeeded];

в - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath до return cell

Вопрос 2

Решение оказалось очень простым. Мне просто нужно было реализовать viewWillDissapear и перезагрузить данные, поэтому код выглядит следующим образом:

- (void)viewWillDisappear:(BOOL)animated;{
    [super viewWillDisappear:animated];
    [self.tableView reloadData];
}

Решение для меня было простым, если оно не работает для кого-то, здесь я нашел полезные ссылки.
1) Макет UITableView перепутался с нажатием кнопки и возвратом. (iOS 8, Xcode beta 5, Swift)
2) http://useyourloaf.com/blog/2014/08/07/self-sizing-table-view-cells.html

Ответ 2

К сожалению, я считаю, что оба вопроса, о которых вы спрашиваете, являются ошибками IOS.

Вопрос (1)

Легкое исправление предлагается этим блоком .

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

Просто добавьте следующее к вашему методу viewDidAppear. Я тестировал его, и он работает очень хорошо.

[self.tableView reloadData];

Вопрос (2)

Этот второй вопрос является дубликатом этого следующего вопроса:

IOS 8 Самонастраивающиеся ячейки UITableView прыгают/сдвигаются визуально при нажатии на новый контроллер просмотра

Обходной путь предложен автором вопроса сам, что кажется хорошо. Тем не менее, я еще не пробовал это.

Хорошо, я решил это, кэшируя высоты ячеек в sizeThatFits и возвращая это значение для оцениваемых высот ячеек в пределах делегата. Прекрасно работает.

Не стесняйтесь переходить к этому вопросу для других предлагаемых решений.