You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改可编辑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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 08:37:57