如何修改可编辑SwiftUI List中重新排序图标的颜色?
如何修改可编辑SwiftUI List中重新排序图标的颜色?
嗨,我来帮你解决这个问题!要修改SwiftUI List里重新排序图标的颜色,有几种不同的方法,你可以根据自己的需求来选择:
方法一:快速修改(会影响同层级的 tint 关联元素)
最简单的方式就是给你的List添加tint修饰符,默认的排序图标会自动继承这个颜色。这种方法实现起来超省心,但要注意,同层级里其他受tint影响的元素(比如EditButton)也会跟着改变颜色:修改你的代码,给List加上
tint设置:struct DummyList: View { @State private var items = ["item 1", "item 2", "item 3"] @State private var editMode = EditMode.active var body: some View { List { ForEach(items, id: \.self) { item in Text(item) } .onMove(perform: move) } .tint(.orange) // 这里替换成你想要的颜色,比如橙色、红色等 .toolbar { EditButton() } .environment(\.editMode, $editMode) } func move(from source: IndexSet, to destination: Int) { items.move(fromOffsets: source, toOffset: destination) } }方法二:单独修改排序图标(不影响其他元素)
如果你不想让EditButton或者其他控件跟着变色,可以通过UIKit的外观设置来单独指定排序手柄的颜色。这个方法需要注意,它会全局影响APP里所有的UITableView排序手柄,所以我们可以在视图出现时临时设置,消失后恢复原来的颜色:struct DummyList: View { @State private var items = ["item 1", "item 2", "item 3"] @State private var editMode = EditMode.active // 保存原始颜色,用于视图消失后恢复 @State private var originalReorderColor: UIColor? var body: some View { List { ForEach(items, id: \.self) { item in Text(item) } .onMove(perform: move) } .toolbar { EditButton() } .environment(\.editMode, $editMode) .onAppear { // 记录原始颜色 originalReorderColor = UITableView.appearance().reorderControlTintColor // 设置新的排序手柄颜色 UITableView.appearance().reorderControlTintColor = .systemRed } .onDisappear { // 恢复原始颜色 if let originalColor = originalReorderColor { UITableView.appearance().reorderControlTintColor = originalColor } } } func move(from source: IndexSet, to destination: Int) { items.move(fromOffsets: source, toOffset: destination) } }注意:
reorderControlTintColor是iOS 15及以上版本才支持的属性,如果你的APP需要兼容更低版本,可能需要自定义单元格来实现,但上面的方法已经能覆盖大部分主流场景啦。
备注:内容来源于stack exchange,提问作者wanted
相关产品推荐
相关产品推荐

