如何仅隐藏前导或尾随NavigationItem按钮



当表单视图处于编辑模式时,我想隐藏"返回"按钮:

struct DetailsView: View {
@Binding var item: PocketItem
@Environment(.presentationMode) var presentationMode: Binding<PresentationMode>
@Environment(.editMode) var editMode
var body: some View {
Form {
TextField("qwerty", text: $pocketItem.name)
.disabled(.inactive == self.editMode?.wrappedValue)
.foregroundColor((.active == self.editMode?.wrappedValue) ? Color.black : Color.gray)
}
.navigationBarTitle(.inactive == self.editMode?.wrappedValue ? "(item.name) Details" : "Edit View", displayMode: .inline)
.navigationBarItems(
leading: Button(action: {self.presentationMode.wrappedValue.dismiss()}){
Image(systemName: "chevron.left").imageScale(.large)
Text("Back")
},
trailing: Button(action: {
self.editMode?.wrappedValue = .active == self.editMode?.wrappedValue ? .inactive : .active
})
{
Text(.active == self.editMode?.wrappedValue ? "Done" : "Edit")
}
)
}
}

有没有办法在尾随或前导项上使用任何修饰符来隐藏它们?

可以使用条件视图,如下面的

...
.navigationBarItems(
leading: leadingButton(),    // << here !!
trailing: Button(action: {
self.editMode?.wrappedValue = .active == self.editMode?.wrappedValue ? .inactive : .active
})
{
Text(.active == self.editMode?.wrappedValue ? "Done" : "Edit")
}
)
}
private func leadingButton() -> some View {
Group {
if self.editMode?.wrappedValue != .active { // otherwise will be EmptyView
Button(action: {self.presentationMode.wrappedValue.dismiss()}){
Image(systemName: "chevron.left").imageScale(.large)
Text("Back")
}
}
}
}

最新更新