Черный экран iOS 17 NavigationStack ⇐ IOS
-
Гость
Черный экран iOS 17 NavigationStack
Я только что обновил свои Xcode и iPhone до новейших версий iOS17 и Xcode 15. Я заметил, что когда я нажимал свою пользовательскую кнопку «Назад» в своем приложении, которое я создаю, оно превращалось в черный экран, а затем закрывало экран, в то время как смахнуть его, кажется, все еще нормально. Этого никогда не происходило до обновления до iOS17. Обычно, как только я нажимаю кнопку «Назад», она плавно сдвигается в сторону и закрывается экран.
Вот мой код, который я использую:
InitView:
NavigationStack { ... ... } .navigationDestination(for: String.self) {маршрут в переключить маршрут { случай «LoginView»: LoginView (путь: $path) случай «RegisterView»: RegisterView (путь: $path) случай «ResetPasswordView»: ResetPasswordView (путь: $path) по умолчанию: Текст("Неизвестно") } } Просмотр входа:
struct LoginView: Просмотр { @Binding var path: NavigationPath //Навигация var body: some View { ВСтек { Кнопка (действие: { //назад отклонить кнопку //self.presentationMode.wrappedValue.dismiss() //Это не приводит к появлению черного экрана. path.removeLast() //Это приводит к тому, что LoginView становится черным, а затем возвращает его в InitView. }, этикетка: { ZStack { RoundedRectangle(cornerRadius: 7) .stroke(.gray.opacity(0.3), lineWidth: 3) .frame(ширина: 30, высота: 30) Изображение (имя системы: «chevron.left») .изменяемый размер() .aspectRatio(contentMode: .fit) .frame(ширина: 8) .смелый() .foregroundColor(.gray) } }) } .navigationBarBackButtonHidden() } } Однако это не имеет значения. Это код, который я использую для возврата к InitView, поскольку я применил модификатор .navigationBarBackButtonHidden():
расширение UINavigationController: UIGestureRecouncerDelegate { переопределить открытую функцию viewDidLoad() { супер.viewDidLoad() интерактивныйPopGestureRecouncer?.delegate = self } общественная функция жестRecouncerShouldBegin (_ жестRecouncer: UIGestureRecouncer) -> Bool { вернуть viewControllers.count > 1 } // Чтобы это работало и со ScrollView public func жестRecouncer(_gestRecouncer: UIGestureRecouncer, mustRecounceeSimulentiallyWithotherGestureRecouncer: UIGestureRecouncer) -> Bool { истинный } }
Я только что обновил свои Xcode и iPhone до новейших версий iOS17 и Xcode 15. Я заметил, что когда я нажимал свою пользовательскую кнопку «Назад» в своем приложении, которое я создаю, оно превращалось в черный экран, а затем закрывало экран, в то время как смахнуть его, кажется, все еще нормально. Этого никогда не происходило до обновления до iOS17. Обычно, как только я нажимаю кнопку «Назад», она плавно сдвигается в сторону и закрывается экран.
Вот мой код, который я использую:
InitView:
NavigationStack { ... ... } .navigationDestination(for: String.self) {маршрут в переключить маршрут { случай «LoginView»: LoginView (путь: $path) случай «RegisterView»: RegisterView (путь: $path) случай «ResetPasswordView»: ResetPasswordView (путь: $path) по умолчанию: Текст("Неизвестно") } } Просмотр входа:
struct LoginView: Просмотр { @Binding var path: NavigationPath //Навигация var body: some View { ВСтек { Кнопка (действие: { //назад отклонить кнопку //self.presentationMode.wrappedValue.dismiss() //Это не приводит к появлению черного экрана. path.removeLast() //Это приводит к тому, что LoginView становится черным, а затем возвращает его в InitView. }, этикетка: { ZStack { RoundedRectangle(cornerRadius: 7) .stroke(.gray.opacity(0.3), lineWidth: 3) .frame(ширина: 30, высота: 30) Изображение (имя системы: «chevron.left») .изменяемый размер() .aspectRatio(contentMode: .fit) .frame(ширина: 8) .смелый() .foregroundColor(.gray) } }) } .navigationBarBackButtonHidden() } } Однако это не имеет значения. Это код, который я использую для возврата к InitView, поскольку я применил модификатор .navigationBarBackButtonHidden():
расширение UINavigationController: UIGestureRecouncerDelegate { переопределить открытую функцию viewDidLoad() { супер.viewDidLoad() интерактивныйPopGestureRecouncer?.delegate = self } общественная функция жестRecouncerShouldBegin (_ жестRecouncer: UIGestureRecouncer) -> Bool { вернуть viewControllers.count > 1 } // Чтобы это работало и со ScrollView public func жестRecouncer(_gestRecouncer: UIGestureRecouncer, mustRecounceeSimulentiallyWithotherGestureRecouncer: UIGestureRecouncer) -> Bool { истинный } }
Мобильная версия