Ios SwiftUI EditButton()错误
我在一个模态中呈现一个列表。如果我在导航视图中,编辑按钮就完全坏了 如果我从中删除了NavigationView,那么一开始它似乎可以工作,第二次显示时它又会被破坏Ios SwiftUI EditButton()错误,ios,swift,swiftui,Ios,Swift,Swiftui,我在一个模态中呈现一个列表。如果我在导航视图中,编辑按钮就完全坏了 如果我从中删除了NavigationView,那么一开始它似乎可以工作,第二次显示时它又会被破坏 struct ContentView: View { @State var showSheetView = false var body: some View { Button(action: { self.showSheetView.toggle() }) {
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()
}
}
}
手动处理
editMode
对我来说在macOS Big Sur上使用Xcode 12.1/iOS 14.1非常有效
当我旋转模拟器时,EditButton
在编辑模式下再次显示“Edit”时,我也遇到了一个问题,下面的解决方案也解决了这个问题
以下解决方案使用一个自定义的EditButton
struct来处理手动editMode
绑定。
首先是自定义编辑按钮:
struct EditButton:视图{
@绑定变量editMode:editMode
var body:一些观点{
钮扣{
切换编辑模式{
case.active:editMode=.inactive
case.inactive:editMode=.active
默认值:中断
}
}标签:{
如果让isEditing=editMode.isEditing,则isEditing{
文本(“完成”)
}否则{
文本(“编辑”)
}
}
}
}
使用上面的编辑按钮非常简单:
struct SheetView:View{
@国家私有变量myArray:[字符串]=[“一”、“二”、“三”]
@状态私有变量editMode=editMode.inactive
var body:一些观点{
导航视图{
VStack{
名单{
ForEach(myArray,id:\.self){item in
文本(项目)
}.onDelete(执行:{indexSet in
})
}
}
.navigationBarItems(尾部:EditButton(editMode:$editMode))
.environment(\.editMode,$editMode)
.animation(.spring(响应:0))
}
}
}
尾部导航栏项中的EditButton
处理保存在SheetView
中的@State private var editMode
。
然后使用environment.environment(\.editMode,$editMode)
将该editMode
注入内部视图。
对于编辑模式转换的动画效果,我发现.spring(响应:0)
最合适。而不是
.navigationBarItems(trailing: EditButton())
你可以试试:
.toolbar { EditButton() }
我也有同样的问题,这对我来说效果很好。你能描述一下你认为什么是坏的以及期望的效果是什么吗。这两部电影看起来差不多。所以我希望在点击编辑按钮时进入编辑模式。这意味着将显示每行的红色按钮。有意义吗?看第二张图片,我第一次展示屏幕时,屏幕上会出现。如果你将编辑按钮与列表而不是vstack关联,会发生什么?同样的错误…对我来说很有效,但很奇怪,不是吗?
.toolbar { EditButton() }