我在一个模式中展示了一个列表。如果我在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()
}
}
}

发布于 2020-10-27 00:02:11
在使用Xcode12.1/ iOS 14.1的macOS Big Sur上,手动处理editMode对我来说很有效。
我还有一个问题,当我旋转模拟器时,EditButton在编辑模式下再次显示“编辑”,下面的解决方案也解决了这个问题。
下面的解决方案使用处理手动editMode绑定的自定义EditButton结构。首先是自定义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处理保存在SheetView中的@State private var editMode。然后使用环境.environment(\.editMode, $editMode)将此editMode注入到内部视图中。对于编辑模式转换的动画效果,我发现.spring(response: 0)最合适。
发布于 2021-01-02 19:24:43
而不是
.navigationBarItems(trailing: EditButton())您可以尝试:
.toolbar { EditButton() }我也有同样的问题,这对我来说很好。
https://stackoverflow.com/questions/64417416
复制相似问题