В SwiftUI, как избежать отступа содержимого строки в моем Списке, когда я перехожу в режим редактирования, но не использую onDelete? То есть, в настоящее время содержимое моей строки имеет отступ, как это происходит, как будто кнопка «удалить» будет показана слева, однако я не использую onDelete, поэтому там нет кнопки.
Анимированный GIF
Извлечение кода здесь:
var body: some View {
VStack{
List() {
ForEach(gcTasks) { gcTask in
HStack {
GCTaskRow(withGcTask: gcTask, haha: "")
}
}
// .onDelete(perform: self.deleteTask) // NOTE: HAVE REMOVED
.onMove(perform: self.move)
}
}
.environment(\.editMode, listInEditMode ? .constant(.active) : .constant(.inactive))
}
Фон - На самом деле хотите перейти к тому, чтобы быть всегда в режиме РЕДАКТИРОВАНИЯ, т. е. всегда есть возможность перетаскивания строки вверх / вниз, однако никогда не будет использовать Delete, поэтому вы хотите просмотреть все следы onDelete, в данном случае это автоматический c отступ.
ОБНОВЛЕНИЕ: Другой пример (игровые площадки) того, как происходит нежелательное отступление:
import SwiftUI
import PlaygroundSupport
let modelData: [String] = ["Eggs", "Milk", "Bread"]
struct ListTestNoDelete: View {
private func move(from uiStartIndexSet: IndexSet, to uiDestIndex: Int) {
print("On Move")
}
var body: some View {
NavigationView {
VStack {
List {
ForEach(modelData, id: \.self) { str in
Text(str)
}
.onMove(perform: self.move)
}
.environment(\.editMode, .constant(.active))
.navigationBarTitle( Text("Test") )
}
}
}
}
let listTest = ListTestNoDelete()
PlaygroundPage.current.liveView = UIHostingController(rootView: listTest)