Вопрос или проблема
У меня есть оригинальное приложение для 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 приложение работало без нареканий.
Потенциальные Причины
-
Изменения в iOS 18: Обновления операционной системы могут приносить изменения в обработку анимаций и представления пользовательского интерфейса. В частности, возможно, что система искажает загрузочные анимации UITableView.
-
Проблемы адаптации интерфейса: На некоторых версиях iOS может наблюдаться неправильная обработка фреймов, особенно при переходе между контроллерами. Необходимо убедиться, что все ограничения (constraints) установлены корректно, и что они учитывают изменения, вызванные обновлением OS.
-
Свойства UITableView: Возможно, некоторые настройки вашей таблицы не подходят для новой версии. Это может касаться свойств, связанных с делегированием и анимациями, например,
estimatedRowHeight
. -
Сбои при рендеринге: Если судить по видео, проблема может быть вызвана неэффективным рендерингом UITableView при смене вкладки. Загрузка данных в новой версии iOS может работать иначе, чем в предыдущих версиях.
Рекомендации по Устранению Проблемы
-
Проверка Ограничений (Constraints): Убедитесь, что все ограничения для вашего UITableView установлены правильно. Инструмент "Debug View Hierarchy" в Xcode может помочь выявить проблемы с ограничениями.
-
Переход на Визуальные анимации: Рассмотрите возможность отключения анимаций при загрузке UITableView. Используйте
UIView.performWithoutAnimation
для отключения анимации во время загрузки данных. -
Тестирование на Реальных Устройствах: Поскольку проблема проявляется как в симуляторе, так и на реальных устройствах, провести тестирование с различными конфигурациями устройства и разрешениями экрана важно.
-
Обновление Используемых Библиотек: Убедитесь, что все используемые библиотеки и фреймворки совместимы с iOS 18. Иногда старые версии библиотек могут содержать ошибки, которые были исправлены в более поздних версиях.
-
Обратная Связь в Developer Forums: Поскольку вы обнаружили, что проблема может быть связана с другими, уже упомянутыми вами вопросами в сообществах разработчиков, стоит создать новый вопрос в соответствующем форуме или просмотреть уже существующие обсуждения.
Заключение
Проблемы с производительностью интерфейсов в новых версиях iOS могут быть трудными для диагностики, и часто требуют внимательного анализа кода и среды. Применение предложенных рекомендаций должно помочь вам скорректировать поведение UITableView и устранить проблему "статуса" при переключении табов. Обязательно следите за обновлениями Apple, поскольку исправления могут быть выпущены в виде новых патчей для iOS 18.