Кнопка NavigationItem и кнопка режима редактирования отображаются на разных уровнях - PullRequest
1 голос
/ 17 марта 2020

У меня есть кнопка навигации в дочернем виде из родительского вида, когда я реализую кнопку Редактировать, она отображается в другом положении:

struct DetailsView: View {

    @Binding var item: PocketItem
    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
    @Environment(\.editMode) var editMode


    var body: some View {

        NavigationView {
            Form {

                TextField("Placeholder", text: $item.name)
                    .disabled(.inactive == self.editMode?.wrappedValue)
                    // .textFieldStyle(RoundedBorderTextFieldStyle())
                    .foregroundColor((.active == self.editMode?.wrappedValue) ? Color.black : Color.gray)

            }
            .navigationBarTitle(.inactive == self.editMode?.wrappedValue ? "\(pocketItem.name) Details" : "Edit Pocket", displayMode: .inline)
            .navigationBarItems(
                trailing: Button(action: {
                    self.editMode?.wrappedValue = .active == self.editMode?.wrappedValue ? .inactive : .active
                    })
                    {
                        Text(.active == self.editMode?.wrappedValue ? "Done" : "Edit")
                    }
            )

        }

    }

}

изображение моего приложения

1 Ответ

1 голос
/ 17 марта 2020

Поскольку ваш родительский вид имеет NavigationView, вам не нужно вкладывать другой NavigationView в детали. Удалите NavigationView из детали, чтобы исправить проблему.

var body: some View {
    //NavigationView {
        Form {
            TextField("Placeholder", text: $item)
                .disabled(.inactive == self.editMode?.wrappedValue)
                // .textFieldStyle(RoundedBorderTextFieldStyle())
                .foregroundColor((.active == self.editMode?.wrappedValue) ? Color.black : Color.gray)
        }
        .navigationBarTitle(.inactive == self.editMode?.wrappedValue ? "\(item) Details" : "Edit Pocket", displayMode: .inline)
        .navigationBarItems(
            trailing: Button(action: {
                self.editMode?.wrappedValue = .active == self.editMode?.wrappedValue ? .inactive : .active
                })
                {
                    Text(.active == self.editMode?.wrappedValue ? "Done" : "Edit")
                }
        )
    //}
}
...