Предотвращение появления просмотров из левого верхнего угла во время анимации в iOS

Иногда, когда ячейки таблицы отображаются в анимации, e, g, -[UIView viewWillAppear:animated] с -[UITableView reloadData] , содержимое внутри них появляется в верхнем левом углу (0, 0) до конечных кадров. Эта проблема также возникает и в других анимациях просмотра. Еще в прежние времена эта проблема не существовала. В одном обновлении iOS возникла проблема, но исходные позиции были случайными, обычно вне экрана. В другом обновлении iOS проблема стала детерминированной с начальной позицией (0,0).

Я попробовал [tableView layoutIfNeeded] , [tableView.layer displayIfNeeded] после [tableView reloadData] и те, что находятся в ячейках в cellForRowAtIndexPath . Что я пропустил?

Я загрузил образец проекта https://github.com/keithyipkw/ios-animation-bug . Чтобы надежно воспроизвести проблему, установите точку останова в viewWillAppear, перед reloadData. Потяните экран, чтобы показать сегодняшний центр. Запуск после сегодняшнего центра полностью заметен.

скриншоты

У меня тоже такая же проблема, это происходит, когда телевизор впервые отображает ячейки.
Это связано с тем, что ячейки создаются с начальным размером прототипа в раскадровке и затем изменяются по размеру на основе ширины телевизора. Чтобы избежать этого в cellForRowAtIndexPath я устанавливаю ширину в ячейке как размер телевизора и принудительно устанавливаю автоматическое обновление макета ячейки, чтобы все элементы уже соответствовали этому размеру.
Я все еще не нашел реального решения, это скорее трюк, я надеюсь, что кто-то еще даст отзыв по вашему вопросу.

Исправление состоит в том, чтобы использовать ячейки dequeue и init с идентификаторами повторного использования. Он по-прежнему работает, когда ячейка появляется в первый раз. Магия заключается в dequeue и init с тем же ненулевым идентификатором.

 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; } 
  • UITableViewCell подвижная анимация
  • Анимация элементов взглядов, которые переходят на
  • Сбой приложения во время анимации ключевого кадра: - непризнанный селектор
  • блок завершения анимации aiview никогда не вызывается, если вид исчезает
  • Анимация блока UIView перемещает взгляд влево и вправо и обратно влево
  • iOS завивает анимацию, чтобы удалить uiimageview
  • Анимирование перехода клавиатуры «inputView»
  • Пользовательская анимация Segue
  • Как обновить дочерние контроллеры при добавлении / удалении с контроллера контейнера?
  • Невозможно минимизировать subview наряду с mainView во время анимации
  • Как отменить анимацию на основе блоков UIViews?
  • Interesting Posts

    IOS. Как я могу поймать исключение, когда другой код уже использует NSSetUncaughtExceptionHandler?

    NSAttributedString игнорирует Autoshrink и numberOfLines для UILabel (iOS 6)

    Runtime Issue – «Вложенная push-анимация» при использовании функции performSegueWithIdentifier

    Увеличение UISlider на 1 в диапазоне от 1 до 100

    Почему arc4random () ведет себя по-разному при хранении в переменной или нет?

    Как я могу «отменить и запросить» мой профиль разработчика iOS?

    Где я могу установить имя приложения, которое пользователь видит на главном экране

    Неверное значение кадра при доступе к представлению из раскадровки в IOS

    numberOfLines UILabel не работает в ячейке

    IOS7 – UIWebView: аудиофайлы HTML5 приостанавливаются, когда приложение вводит фон

    Подключите все элементы пользовательского интерфейса к одному разъему сразу, быстро

    Нечетное поведение SplitView / NavigationController в iOS6

    Как добавить изображение между текстами в виде предупреждения?

    Ловушки при написании приложения iOS, поддерживающего iOS 3.1.3 и iOS 4.x

    как реплицировать эту команду postgres в coredata?

    Давайте будем гением компьютера.