Проблема с черным экраном на платформе iOS при переключении экрана с использованием Kotlin MultiplatformIOS

Программируем под IOS
Ответить
Anonymous
 Проблема с черным экраном на платформе iOS при переключении экрана с использованием Kotlin Multiplatform

Сообщение Anonymous »

Во время разработки приложения KMP + Compose я столкнулся с проблемой пользовательского интерфейса только для iOS.
Проблема выглядит так: при использовании приложения в какой-то случайный момент времени экраны остаются черными, и когда я через полсекунды перехожу на другую вкладку, я вижу прошлый экран, а затем черный экран, это тоже странный момент, потому что во время перехода на новую вкладку я должен видеть на втором текущем экране, а не прошлый экран.
Также на одном из моих экранов есть плеер с автозапуском. Этот экран был создан изначально в iOS, и когда появилась эта ошибка, плеер не запускался.
Эта проблема возникает только на экранах, находящихся внутри панели вкладок. Компонент TabBar по-прежнему виден и доступен для щелчка, и пользователь может взаимодействовать с компонентом навигации, но не с каким-либо экраном внутри.
Для навигации() и экранный пользовательский интерфейс с использованием собственных компонентов Android/KMP, ничего родного для IOS, по крайней мере, в коде Swift с нашей стороны.
Решение проблемы возможно, если я перезапущу приложение.
Алгоритм воспроизведения этой ошибки следующий:
Приложение не должно запускаться. Мне нужно открыть приложение, щелкнуть вкладку (в моем случае последнюю), затем сразу переключиться на следующую вкладку и обратно, и все это примерно за 10 секунд. Если проблема не была обнаружена, мне нужно закрыть приложение и запустить заново. За 10 раундов этого алгоритма я могу воспроизвести эту проблему.
Это не универсальный алгоритм, но он работает. Мой результат после тестирования:
Используя эти физические устройства, я могу воспроизвести эту проблему.
iPhone 13 Pro Max, iOS 17.6.1
iPad Pro 12.9, iOS 18.5
iPad Pro 12.9, iOS 18.6.2
Устройства, на которых я не могу воспроизвести эту проблему.
iPhone SE 2022, iOS 18.5
К сожалению, количество физических устройств ограничено, но похоже, что эта проблема также может зависеть от размера экрана. На iPad эту проблему можно решить очень быстро, следуя приведенному выше алгоритму.
Подробности проекта:
Минимальная версия проекта iOS — iOS 16.
Kotlin версия 2.2.0
Compose Multiplatform 1.8.2
AGP 8.8.2
AndroidX Navigation 2.9.0-beta03
Жизненный цикл AndroidX 2.9.1
Знаете ли вы, в чем проблема, или, возможно, кто-то уже сталкивался с этой проблемой и решил ее?
Дополнительные сведения
К сожалению, я не могу опубликовать пример кода этой проблемы, так как не понимаю, что привело к этой проблеме, а проект имеет ограничения. Но у меня есть некоторая информация.
Видеопример проблемы
Общий обзор иерархии экранов, который я прикрепил к этому сообщению:
Изображение

Изображение

Для навигации я использовал библиотеку compose-navigation.
Кроме того, я пытался удалить подобную анимацию, но проблема все равно возникла.

Код: Выделить всё

composable(

enterTransition = { EnterTransition.None },

exitTransition = { ExitTransition.None }

) {

MyListScreen(navController, koinViewModel(), paddingValues)

}
В качестве дополнительного эксперимента я создал небольшой тест анимации и смог воспроизвести проблему с этими анимациями:

Код: Выделить всё

fadeIn(tween(0)) - My Default animation for the screen where the issue is

fadeOut(tween(0)) - My Default animation for the screen where the issue is

fadeIn()

fadeOut()

slideInHorizontally(tween(0))

slideOutHorizontally(tween(0))

slideIn() - The same issue + one-time app was fully unresponsive

slideOut() - The same issue + one-time app was fully unresponsive
Кроме того, приведенный ниже вид анимации имеет похожую + иногда ту же проблему во время выполнения анимации с использованием алгоритма задачи, и после окончания анимации все работает хорошо.

Код: Выделить всё

slideInHorizontally()

slideOutHorizontally()

slideInVertically(tween(0))

slideOutVertically(tween(0))

slideInVertically()

slideOutVertically()
Я предполагаю, что в приведенной выше анимации нет проблем в конце анимации, поскольку у них есть некоторое время выполнения или другие нюансы.

Подробнее здесь: https://stackoverflow.com/questions/798 ... lin-multip
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»