SwiftUI: нежелательный разделенный вид на iPad

Проблема: вид на Pad отображается с нежелательным разделением.

Моя текущая настройка: Catalina OSX beta 5 + Xcode 11 Beta 5

Вот код, который я использовал, с навигационным видом и заголовком навигации

import SwiftUI

struct SwiftUIView: View {
    var body: some View {

        NavigationView {

                   Text("Search")

                       .navigationBarTitle(Text("Search"))




               }

    }
}

#if DEBUG
struct SwiftUIView_Previews: PreviewProvider {
    static var previews: some View {
        SwiftUIView()
    }
}
#endif

При моделировании на iPad (как на физическом устройстве, так и в режиме предварительного просмотра) вместо полноэкранного просмотра я получаю следующее представление:

Если у меня есть только вид без NavigationView, я получаю полноэкранный вид:


import SwiftUI

struct SwiftUIView: View {
    var body: some View {



        Text("Hello World!")
    }
}

#if DEBUG
struct SwiftUIView_Previews: PreviewProvider {
    static var previews: some View {
        SwiftUIView()
    }
}
#endif

Как сделать полноэкранный (не разделенный) экран NavigationView на iPad?

Цените, если кто-то может помочь!

1 ответ

Решение

Вы можете применить .navigationViewStyle(StackNavigationViewStyle()) модификатор для NavigationView!

... 
    NavigationView {
        Text("Hello world!")
    }
    .navigationViewStyle(StackNavigationViewStyle())
...

Изменить: ниже, я отвечаю на вопросы Александра из его комментария:

  • Почему полноэкранный режим не используется по умолчанию для iPad? Это просто выбор, сделанный Apple...

  • Почему этот модификатор выходит за пределы закрытия NavigationView, а заголовок навигации идет внутрь... Может быть, это дает пояснение: /questions/49847778/kakovo-ravenstvo-uisplitviewcontroller-v-swiftui/49847786#49847786

Чтобы использовать этот стиль разделения для iPad, но удалить его для iPhone:

    extension View{
    func phoneOnlyStackNavigationView() ->some View{

        if UIDevice.current.userInterfaceIdiom == .phone{
            return AnyView(self.navigationViewStyle(StackNavigationViewStyle()))
        }else{
            return AnyView(self)
        }
    }
}
Другие вопросы по тегам