Панель навигации появляется, когда устройство поворачивается в альбомную ориентацию с помощью SwiftUI

Экран работает отлично (без панели навигации) в:

  • портретный режим айфона
  • Айпад портретный режим
  • Ландшафтный режим iPad

Он показывает только панель навигации (из ниоткуда) в ландшафтном режиме iPhone.

Может ли кто-нибудь предложить, что я делаю неправильно или что можно сделать, чтобы панель навигации исчезла даже в ландшафтном режиме iPhone? Заранее спасибо.

Прикрепляю сюда скриншоты портретного и ландшафтного режима.

Панель навигации отображается в ландшафтном режиме

Прекрасно работает (без панели навигации) в портретном режиме

struct LoginView: View {

@ObservedObject var vm = LoginVM()

var body: some View {
    NavigationView {
        VStack {
                TextField("Username", text: $vm.username)
                    .padding()
                    .overlay(RoundedRectangle(cornerRadius: 10)
                    .stroke(Color.blue, lineWidth: 0.5))
                    .padding([.top, .bottom])
                
                SecureField("Password / SMS Code", text: $vm.password)
                    .padding()
                    .overlay(RoundedRectangle(cornerRadius: 10)
                    .stroke(Color.blue, lineWidth: 0.5))
                    .padding(.bottom, 20)
                
                HStack {
                    Spacer()
                    NavigationLink(
                        destination: ForgotPassView(),
                        label: {
                            Text("Forgot Password ?")
                    }).padding(.bottom, 40)
            }
        }.padding()
    }
    .navigationViewStyle(StackNavigationViewStyle())
}

}


person Vinay    schedule 24.03.2021    source источник


Ответы (1)


Добавьте .navigationBarHidden(true) в дочернее представление NavigationView:

var body: some View {
        NavigationView {
            VStack {
                TextField("Username", text: $vm.username)
                    .padding()
                    .overlay(RoundedRectangle(cornerRadius: 10)
                                .stroke(Color.blue, lineWidth: 0.5))
                    .padding([.top, .bottom])
                
                SecureField("Password / SMS Code", text: $vm.password)
                    .padding()
                    .overlay(RoundedRectangle(cornerRadius: 10)
                                .stroke(Color.blue, lineWidth: 0.5))
                    .padding(.bottom, 20)
                
                HStack {
                    Spacer()
                    NavigationLink(
                        destination: ForgotPassView(),
                        label: {
                            Text("Forgot Password ?")
                        }).padding(.bottom, 40)
                }
            }
            .padding()
            .navigationBarHidden(true) //<-- here
        }
        .navigationViewStyle(StackNavigationViewStyle())
    }
person jnpdx    schedule 24.03.2021
comment
Добавление .navigationBarHidden(true) отлично работает на этом конкретном экране, но когда я перехожу к ForgotPassView(), нажимая «Забыли пароль?» (как указано в приведенном выше коде), тогда панель навигации ForgotPassView() отображается в белом цвете для: - портретного режима iPhone - портретного режима iPad - ландшафтного режима iPad и в родном цвете, т.е. сером (полупрозрачном) для ландшафтного режима iPhone. Что можно сделать, чтобы он вел себя одинаково на iPhone и iPad в обоих режимах? - person Vinay; 25.03.2021
comment
Я не уверен, что с макушки головы, хотя я могу поэкспериментировать. Звучит как отдельный вопрос. Этот вопрос заключался в том, как скрыть панель навигации, которую я продемонстрировал в этом ответе, верно? Или, возможно, ваш вопрос заключается в том, как скрыть панель навигации в последующих представлениях — вам придется снова использовать .navigationBarHidden - person jnpdx; 25.03.2021
comment
Я думаю, что это взаимосвязано, поэтому даже мне нужно скрывать панель навигации отдельно (для ландшафта), когда она не видна в портретном режиме. Таким образом, скрытие панели навигации с помощью .navigationBarHidden(true) только для того, чтобы не показывать ее в альбомной ориентации, не выглядит идеальным решением. Может быть, моя проблема связана с ошибкой в ​​SwiftUI, и скрытие панели навигации таким образом не выглядит хорошим обходным путем. - person Vinay; 25.03.2021
comment
Честно говоря, это звучит так, как будто вы не хотите использовать NavigationView, если не хотите показывать панель навигации. - person jnpdx; 25.03.2021