Почему представление 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())
}