SwiftUI - панель навигации не отображается в модальном NavigationView - PullRequest
0 голосов
/ 07 ноября 2019

Попытка создать модал, похожий на модал «Создать событие» в приложении Apple Calendar. Я успешно показал мой модал, используя следующий код в родительском NavigationView:

.navigationBarItems(trailing:
                    Button(action: {
                        self.isModal = true
                        }) {
                        Image(systemName: "plus").sheet(isPresented: $isModal, content: {
                            EventCreate(showModal: self.$isModal)
                        })
                    }
            )

Модал отображается успешно, но я не могу отобразить панель навигации в модале, которая выглядит следующим образом:

struct EventCreate: View {

    @Binding var showModal: Bool

    @State var event = Event(id: 0, title: "", description: "", location: "", start: Date(), end: Date(), cancelled: false, public_occurrence: false, created: "", last_updated: "", guests: -1)

    var body: some View {
        NavigationView {
            Form{
                Section {
                    TextField("Title", text: $event.title)
                    TextField("Location", text: $event.location)
                }
                Section {
                    DatePicker(selection: $event.start, label: { Text("Start") })
                    DatePicker(selection: $event.end, label: { Text("End") })
                }
            }
        }
        .navigationBarTitle(Text("Create Event"), displayMode: .inline)
        .navigationBarItems(leading:
            Button("Close") {
                self.showModal = false
        })

    }
}

Приложение строится, и форма отображается, но NavigationView не: Screenshot of missing view

Как я могу сделать это шоу? Или есть другой вид, который я должен использовать вместо NavigationView

1 Ответ

1 голос
/ 08 ноября 2019

Вам необходимо поместить модификаторы navigationBarTitle и navigationBarItems внутри NavigationView, а не снаружи. Эти модификаторы должны быть размещены в представлении, которое вы встраиваете, в вашем случае Form

struct EventCreate: View {

    @Binding var showModal: Bool

    @State var event = Event(id: 0, title: "", description: "", location: "", start: Date(), end: Date(), cancelled: false, public_occurrence: false, created: "", last_updated: "", guests: -1)

    var body: some View {
        NavigationView {
            Form{
                Section {
                    TextField("Title", text: $event.title)
                    TextField("Location", text: $event.location)
                }
                Section {
                    DatePicker(selection: $event.start, label: { Text("Start") })
                    DatePicker(selection: $event.end, label: { Text("End") })
                }
            }
            .navigationBarTitle(Text("Create Event"), displayMode: .inline)
            .navigationBarItems(leading:
            Button("Close") {
                self.showModal = false
            })
       }
    }
}

Эта статья от HackingWithSwift показывает правильное размещение.

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