Swift UITableView заикался при загрузке при переключении панели вкладок, только на iOS 18.

Вопрос или проблема

У меня есть оригинальное приложение для iOS, написанное в Xcode 15, Swift 5.10 на macOS Sonoma, всё работало хорошо.

ПРОБЛЕМА

После обновления до Xcode 16.0 и Swift 6 на macOS 15.0 возникла проблема. При компиляции приложения на симуляторе iPhone с iOS 18.0, UITableView дергался / прыгал вверх и вниз сразу после загрузки представления при нажатии на элемент вкладки.

Прикреплено видео здесь:

Левая сторона: нормальная анимация на симуляторе iPhone SE (iOS 17.5)

Правая сторона: дергающееся представление на симуляторе iPhone SE (iOS 18)

УСТРАНЕНИЕ НЕУСТОЙЧИВОСТИ

Попытки:

  • Создал совершенно пустой проект, чтобы воспроизвести проблему. На сцене был связан UITabBarController с двумя UITableViewController в качестве двух элементов вкладки. Скомпилировал программу на симуляторе iPhone SE, и проблема осталась.
  • Изменил минимальную версию развертывания Target на iOS 15.6, затем
    скомпилировал программу на симуляторе iPhone SE с iOS 17.5, и проблема не проявилась.
  • Пробовал симуляторы iPhone 16 (iOS 18) и iPad, проблема существует только на iOS 18 на обоих устройствах.
  • Тестировал на реальном iPhone 13 (iOS 18), но у него такая же проблема.
  • Пробовал подкорректировать высоты строк и заголовков и их оценки, но безуспешно.
  • Пробовал отключить прокрутку в таблице. Представление будет прикрепляться к верхней части экрана, как показано ниже, но дергание исчезло вместе с прокруткой:

Отключенная прокрутка

Прикреплён тестовый проект

Версия Mac: Mac Mini M2 с macOS 15.0.1 (24A348)

Версия Xcode: 16.0 (16A242d)

Пока ещё новички в Swift. Спасибо за любую помощь!

ИЗМЕНЕНИЕ:

Это подозревается как связанная проблема.

Ответ или решение

Проблема, с которой вы столкнулись в вашем приложении на Swift, связанная с прерывистостью (статутом) UITableView при переключении табов на iOS 18, является довольно распространённой и может иметь несколько причин. Давайте рассмотрим возможные факторы, которые могут влиять на это поведение, а также пути их решения.

Описание Проблемы

Вы сообщили, что после обновления на Xcode 16 и Swift 6 проблема возникла только на iOS 18, как в симуляторе, так и на реальном устройстве. Это поведение кажется аномальным, особенно учитывая, что на более ранних версиях iOS приложение работало без нареканий.

Потенциальные Причины

  1. Изменения в iOS 18: Обновления операционной системы могут приносить изменения в обработку анимаций и представления пользовательского интерфейса. В частности, возможно, что система искажает загрузочные анимации UITableView.

  2. Проблемы адаптации интерфейса: На некоторых версиях iOS может наблюдаться неправильная обработка фреймов, особенно при переходе между контроллерами. Необходимо убедиться, что все ограничения (constraints) установлены корректно, и что они учитывают изменения, вызванные обновлением OS.

  3. Свойства UITableView: Возможно, некоторые настройки вашей таблицы не подходят для новой версии. Это может касаться свойств, связанных с делегированием и анимациями, например, estimatedRowHeight.

  4. Сбои при рендеринге: Если судить по видео, проблема может быть вызвана неэффективным рендерингом UITableView при смене вкладки. Загрузка данных в новой версии iOS может работать иначе, чем в предыдущих версиях.

Рекомендации по Устранению Проблемы

  1. Проверка Ограничений (Constraints): Убедитесь, что все ограничения для вашего UITableView установлены правильно. Инструмент "Debug View Hierarchy" в Xcode может помочь выявить проблемы с ограничениями.

  2. Переход на Визуальные анимации: Рассмотрите возможность отключения анимаций при загрузке UITableView. Используйте UIView.performWithoutAnimation для отключения анимации во время загрузки данных.

  3. Тестирование на Реальных Устройствах: Поскольку проблема проявляется как в симуляторе, так и на реальных устройствах, провести тестирование с различными конфигурациями устройства и разрешениями экрана важно.

  4. Обновление Используемых Библиотек: Убедитесь, что все используемые библиотеки и фреймворки совместимы с iOS 18. Иногда старые версии библиотек могут содержать ошибки, которые были исправлены в более поздних версиях.

  5. Обратная Связь в Developer Forums: Поскольку вы обнаружили, что проблема может быть связана с другими, уже упомянутыми вами вопросами в сообществах разработчиков, стоит создать новый вопрос в соответствующем форуме или просмотреть уже существующие обсуждения.

Заключение

Проблемы с производительностью интерфейсов в новых версиях iOS могут быть трудными для диагностики, и часто требуют внимательного анализа кода и среды. Применение предложенных рекомендаций должно помочь вам скорректировать поведение UITableView и устранить проблему "статуса" при переключении табов. Обязательно следите за обновлениями Apple, поскольку исправления могут быть выпущены в виде новых патчей для iOS 18.

Оцените материал
Добавить комментарий

Капча загружается...