【问题标题】:How do you change the select color of a navigation link in a list如何更改列表中导航链接的选择颜色
【发布时间】:2021-08-13 12:44:32
【问题描述】:

这似乎是一个简单的问题,但我在 google 上的任何地方都找不到答案。

当导航链接在列表中时,您可以使用以下命令将其颜色更改为蓝色:

.listRowBackground(Color.blue)

但是当导航链接被选中的时候,就变成了systemGray4

如何更改列表中导航链接的选择颜色

这是上图中的示例项目:

import SwiftUI

struct ContentView: View {
    var body: some View {
        NavigationView {
        List {
            NavigationLink("Hello", destination: Text("hello"))
                .listRowBackground(Color.blue)
            NavigationLink("World", destination: Text("world"))
                .listRowBackground(Color.blue)
        }
        }
    }
}

【问题讨论】:

标签: swift swiftui swiftui-list swiftui-navigationlink


【解决方案1】:

如果您跟踪选定的选项卡,那么您可以专门为选定的选项卡设置列表行的颜色。

例子:

struct ContentView: View {
    enum Tab: String, CaseIterable, Identifiable {
        case hello
        case world

        var id: String { rawValue }

        var title: String {
            switch self {
            case .hello: return "Hello"
            case .world: return "World"
            }
        }
    }

    @State private var selectedTab: Tab?

    var body: some View {
        NavigationView {
            List {
                ForEach(Tab.allCases) { tab in
                    NavigationLink(tab.title, tag: tab, selection: $selectedTab) {
                        Text(tab.rawValue)
                    }
                    .listRowBackground(tab == selectedTab ? Color.accentColor : nil)
                }
            }
        }
    }
}

在模拟器上录制 gif 时,由于某种原因,它无法正常工作。不确定这是否是一个错误。

【讨论】:

  • 你能解释一下 enum tab 部分是做什么的吗,对不起,我对 swift ui 很陌生。
  • @MalachyFernandez 当然-枚举对每个选项卡都有一个案例。选定选项卡的枚举大小写存储在selectedTab 中。当通过单击不同的列表行更改选项卡时,selectedTab 会更改。您可以为此使用字符串,但这更整洁,并且您没有拼写错误破坏选择的风险。枚举还用于循环每个案例并创建一个选项卡,而不是重复代码。
  • 啊,我明白了。谢谢
【解决方案2】:

您可以更改UITableViewCell.appearance() 的属性.selectionStyle。 在您的视图的init 或出现列表时:

.onAppear {
     UITableViewCell.appearance().selectionStyle = .none
}

并继续使用listRowBackground 管理链接的突出显示颜色

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    相关资源
    最近更新 更多