SwiftUI, NavigationView исчезает при вращении? - PullRequest
0 голосов
/ 06 января 2020

Я пытаюсь выяснить, почему вращение устройства приводит к удалению контента go.

Это именно тот код, который я запускаю:

struct ContentView: View {
    @State private var selection = 0

    init() {

    }

    var body: some View {

        NavigationView {

            VStack {
                Button(action: {

                }) {
                    Text("Tap me")
                    .padding()
                    .foregroundColor(.white)
                    .background(Color.blue)
                    .cornerRadius(8)
                }.shadow(color: Color.blue, radius: 20, y: 5)
                    .frame(width: 300, height: 100, alignment: .trailing)

                Text("SwiftUI")
                    .navigationBarTitle("Nav Title")
            }

            Color.red.edgesIgnoringSafeArea([.top,.bottom,.leading,.trailing])

        }

    }
}

enter image description here

Как я могу это исправить, вращая устройство, чтобы содержимое отображалось на экране?

Чтобы обеспечить дополнительную обратную связь после ответа "Liem Vo".

Если я запускаю код на iPhone 11 Pro, а не на макс, работает. enter image description here

При запуске на макс. «Основной вид» уходит с экрана влево в альбомной ориентации, и его можно вытянуть, проведя по нему пальцем. Я не знал об этом поведении, используя NavigationView в SwiftUI, поэтому меня это и привлекло.

Вот поведение на MAX без исправления, предложенного "Liem Vo": enter image description here

1 Ответ

3 голосов
/ 06 января 2020

Проблема в ландшафтном режиме: вид меняется, поэтому вам нужно работать с ним в другом режиме.

Создайте метод расширения, как показано ниже

extension View {
    func phoneOnlyStackNavigationView() -> some View {
        if UIDevice.current.userInterfaceIdiom == .phone {
            return AnyView(self.navigationViewStyle(StackNavigationViewStyle()))
        } else {
            return AnyView(self)
        }
    }
}

И используйте этот метод на ваш взгляд.

struct ContentView: View {
    @State private var selection = 0
    var body: some View {

        NavigationView {

            VStack {
                Button(action: {

                }) {
                    Text("Tap me")
                        .padding()
                        .foregroundColor(.white)
                        .background(Color.blue)
                        .cornerRadius(8)
                }.shadow(color: Color.blue, radius: 20, y: 5)
                    .frame(width: 300, height: 100, alignment: .trailing)

                Text("SwiftUI")
                    .navigationBarTitle("Nav Title")
            }

            Color.red.edgesIgnoringSafeArea([.top,.bottom,.leading,.trailing])

        }
        .phoneOnlyStackNavigationView()

    }
}

Более подробно вы можете сослаться на https://www.hackingwithswift.com/books/ios-swiftui/making-navigationview-work-in-landscape

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...