Почему представление SwiftUI отображается неправильно?

Я создал "мультиплатформенное" приложение SwiftUI (iOS и macOS) из шаблона приложения Xcode 12 beta 6 (12A8189n).

Моя проблема в том, что одно из моих взглядов, AnotherView, отображается неправильно. Вот гифка, показывающая проблему. Заметить, чтоAnotherViewотображается с уже перенесенным стеком навигации в несуществующий вид. При нажатии кнопки "Назад" открывается ожидаемый экран, однако он отображается только частично, заполняя ожидаемую область.

Вот код:

TestNavigationApp.swift

import SwiftUI

@main
struct TestNavigationApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

ContentView.swift

import SwiftUI

struct ContentView: View {
    
    @State private var presentingFirstView = false
    
    var body: some View {
        Button(action: { self.presentingFirstView = true }) {
            
            Text("Present First View")
        }
        .sheet(isPresented: $presentingFirstView) {

            FirstView(isPresented: $presentingFirstView)
        }
    }
}

FirstView.swift

import SwiftUI

struct FirstView: View {
    
    @Binding var isPresented: Bool

    var body: some View {
        
        NavigationView {
            EmbeddedView()
                .navigationBarTitle("First View", displayMode: .large)
        }
    }
}

EmbeddedView.swift

import SwiftUI

struct EmbeddedView: View {
    
    @State private var presentingAnotherView = false
    
    var body: some View {

        VStack {
            Text("Embedded View")
            
            Button(action: { self.presentingAnotherView = true }) {
                
                Text("Present Another View")
            }
        }
        .sheet(isPresented: $presentingAnotherView) {

            AnotherView(isPresented: $presentingAnotherView)
        }
    }
}

AnotherView.swift

import SwiftUI

struct AnotherView: View {
    
    @Binding var isPresented: Bool
    
    var body: some View {
        NavigationView {
            Text("Another View")
                .navigationBarTitle("Another View", displayMode: .large)
        }
    }
}

Во всяком случае, не совсем уверен, что здесь происходит. Любые предложения приветствуются.

1 ответ

Решение

Попробуйте явно использовать стиль представления навигации

var body: some View {
    NavigationView {
        Text("Another View")
            .navigationBarTitle("Another View", displayMode: .large)
    }.navigationViewStyle(StackNavigationViewStyle())
}
Другие вопросы по тегам