Подробное представление SwiftUI не отображается должным образом в приложении iOS Master / Detail

Я пытаюсь создать приложение Master / Detail, которое работает на iOS и iPadOS. Когда я переворачиваю приложение в альбомную ориентацию, на iPadOS оно работает должным образом; однако в iOS главное представление накладывается на представление «Подробности», а не сужается до размеров разделенного экрана. Вероятно, мне не хватает модификатора в одном из представлений, но я не могу найти решение. Любая помощь будет очень признательна.

Вот код:

struct ContentView: View {
    var body: some View {
        VStack(alignment: .leading) {
            NavigationView {
                MasterView().navigationBarTitle("Star Wars Characters")
                DetailView()
            }.navigationViewStyle(DoubleColumnNavigationViewStyle())
        }
    }
}

struct MasterView: View {

    @ObservedObject var dataStore = DataStore()

    var body: some View {
        List {
            ForEach(sortedPeople) { person in
                NavigationLink(destination: DetailView(person: person)) {
                    PersonView(person: person)
                }
            }
        }
    }

    var sortedPeople: [Person] {
        return dataStore.people.sorted {$0.firstName < $1.firstName}
    }
}

struct PersonView: View {
    var person: Person
    var body: some View {
        VStack(alignment: .leading){
            Text("\(person.lastName)").font(.headline).fontWeight(.ultraLight)
            Text("\(person.firstName)").font(.subheadline).fontWeight(.light)
        }
        .padding(.leading)
    }
}

struct DetailView: View {

    var person = Person()

    var body: some View {
        VStack(alignment: .leading, spacing: 5) {
            Text(displayText()).font(.title)
        }.padding()
        .navigationBarTitle("????????")
    }

    func displayText() -> String {
        return person.firstName != "" ? "Hello \(person.name)" : "Click on someone to say hi"
    }
}

Вот результат:

iPadOS

iOS

Как уже указывалось, я понимаю, что это поведение по умолчанию. Однако, если вы посмотрите на приложение Apple «Контакты», окажется, что вы можете добиться желаемого поведения.

Контактное приложение Apple


person indyMac    schedule 01.05.2020    source источник


Ответы (1)


Это поведение по умолчанию. Пейзаж iPhone == Портрет iPad. Если вы коснетесь видимой области DetailView, MasterView отключится с анимацией ящика.

person Prafulla    schedule 01.05.2020