我正在模态中显示一个列表。如果我在NavigationView中,则EditButton完全坏了。
struct ContentView: View {
@State var showSheetView = false
var body: some View {
NavigationView {
Button(action: {
self.showSheetView.toggle()
}) {
Image(systemName: "bell.circle.fill")
.font(Font.system(.title))
}
.sheet(isPresented: $showSheetView) {
SheetView()
}
}
}
}
struct SheetView: View {
@State private var myArray: [String] = ["One", "Two", "Three"]
var body: some View {
NavigationView {
VStack {
List {
ForEach(myArray, id: \.self) { item in
Text(item)
}.onDelete(perform: { indexSet in
})
}
}
.navigationBarItems(trailing: EditButton())
}
}
}
如果我删除了我当前所在的NavigationView,那么起初它似乎可以正常工作,而我第二次出现时,它又被破坏了。
struct ContentView: View {
@State var showSheetView = false
var body: some View {
Button(action: {
self.showSheetView.toggle()
}) {
Image(systemName: "bell.circle.fill")
.font(Font.system(.title))
}
.sheet(isPresented: $showSheetView) {
SheetView()
}
}
}
答案 0 :(得分:2)
在使用Xcode 12.1 / iOS 14.1的macOS Big Sur上,手动处理editMode
对我有用。
旋转模拟器时,我还遇到EditButton
在编辑模式下再次显示“编辑”的问题,以下解决方案也解决了该问题。
以下解决方案使用定制的EditButton
结构来处理手动editMode
绑定。
首先是自定义EditButton
:
struct EditButton: View {
@Binding var editMode: EditMode
var body: some View {
Button {
switch editMode {
case .active: editMode = .inactive
case .inactive: editMode = .active
default: break
}
} label: {
if let isEditing = editMode.isEditing, isEditing {
Text("Done")
} else {
Text("Edit")
}
}
}
}
使用上面的EditButton
很简单:
struct SheetView: View {
@State private var myArray: [String] = ["One", "Two", "Three"]
@State private var editMode = EditMode.inactive
var body: some View {
NavigationView {
VStack {
List {
ForEach(myArray, id: \.self) { item in
Text(item)
}.onDelete(perform: { indexSet in
})
}
}
.navigationBarItems(trailing: EditButton(editMode: $editMode))
.environment(\.editMode, $editMode)
.animation(.spring(response: 0))
}
}
}
尾随导航栏中的EditButton
处理保存在@State private var editMode
中的SheetView
。
然后,使用环境editMode
将此.environment(\.editMode, $editMode)
注入到内部视图中。
对于编辑模式过渡的动画效果,我发现.spring(response: 0)
最合适。
答案 1 :(得分:2)
代替
.navigationBarItems(trailing: EditButton())
你可以试试:
.toolbar { EditButton() }
我遇到了同样的问题,这对我来说很好。