Может ли модальный лист иметь панель навигации в SwiftUI? - PullRequest
2 голосов
/ 12 января 2020

Я представляю модальный лист от кнопки панели навигации в моем коде:

struct MainPage : View {

    @State var isModalSheetShown: Bool = false

    var body: some View {
        VStack {
            [...]
        }
        .navigationBarItems(trailing: HStack {
            Button(action: { self.isModalSheetShown = true }) {
                Text("Add")
            }
        })
        .sheet(isPresented: $isModalSheetShown, content: {
            VStack {
                [...]
            }
            .navigationBarItems(trailing: HStack {
                Button(action: { ... }) {
                    Text("Done")
                })
            })
        })
    }
}

Но панель навигации не отображается на модальном листе, как вы можете видеть ниже.

enter image description here

Что я делаю не так, как поставить навигационную панель на модальном листе?

Ответы [ 2 ]

6 голосов
/ 12 января 2020

Вы должны обернуть ваш модальный вид в NaviagtionView, как это

@State var isModalSheetShown: Bool = false

var body: some View {
    VStack {
        Text("Main")
    }
    .navigationBarItems(trailing: Button("Add",
                                         action: { self.isModalSheetShown = true }))
    .sheet(isPresented: $isModalSheetShown) {
        NavigationView {
            VStack {
                Text("Modal")
            }
            .navigationBarItems(trailing: Button("Done",
                                                 action: {}))
        }
    }
}
0 голосов
/ 12 марта 2020

Модальное представление должно быть заключено в NavigationView, но приведенное выше решение с использованием .navigationBarItems(trailing: Button("Done", action: {})) не работает для меня. Что сработало для меня, так это то, что в модальном представлении я должен добавить навигационную кнопку, а также, чтобы показать панель навигации, я должен использовать .navigationBarTitle("", displayMode: .inline). Так что это часть моего кода ModalView:

  var body: some View {
        VStack (alignment: .leading, spacing: 10) {
            header
            infoBody
            Spacer()
        }
        .padding()
        .navigationBarItems(leading: btnBack)
        .navigationBarTitle("", displayMode: .inline)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...