SwiftUI .deleteDisabled() is not working as expected

Viewed 51

IOS 16 just came out and I was trying to update my app. While doing this, I stumbled upon a problem:

In IOS 15, I had a list where you could delete items. But this was only possible when the isEditing variable is true. The problem is that .deleteDisabled() does not do what I expect it to do.

I’ll explain what happens:

.deleteDisabled(isEditing ? true : false) -> Is Editing = Does not let me edit. Is Not Editing = Lets me edit

.deleteDisabled(isEditing ? false : true) -> Is Editing = Does not let me edit. Is Not Editing = Does not let me edit

What I want is to be able to ONLY edit when isEditing = true. This worked fine in IOS 15 but not in IOS 16

Is this a bug? Is there a workaround?

Under is the complete code where the problem occurs:

import SwiftUI

struct ContentView: View {
    @State var isEditing = false
    @Environment(\.editMode) var mode
    
    @State private var fruits = [
        "Apple",
        "Banana",
        "Papaya",
        "Mango"
    ]
    
    var body: some View {
        NavigationView {
            VStack{
                List {
                    ForEach(fruits, id: \.self) { fruit in
                        Text(fruit)
                    }
                    .onDelete { fruits.remove(atOffsets: $0) }
                    .deleteDisabled(isEditing ? false : true) // Does not work as expected
                    //.deleteDisabled(isEditing ? true : false) // Works as expected
                }
                
            }
            .environment(\.editMode, .constant(self.isEditing ? EditMode.active : EditMode.inactive))
            .animation(Animation.spring(), value: isEditing)
            .navigationTitle("Fruits")
            .toolbar {
                ToolbarItem(placement: .navigationBarTrailing){
                    Button(action: {
                        isEditing.toggle()
                    }, label: {
                        if(isEditing == true){
                            Text("Done")
                        }
                        else{
                            Text("Edit")
                        }
                    })
                }
                
                //EditButton()
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
0 Answers
Related