在 NavigationView 的 SwiftUI 列表中设置雪佛龙的颜色
Posted
技术标签:
【中文标题】在 NavigationView 的 SwiftUI 列表中设置雪佛龙的颜色【英文标题】:Set Color of Chevron in a SwiftUI List in a NavigationView 【发布时间】:2020-07-08 09:05:19 【问题描述】:我有这个列表,我是 NavigationView。 在黑暗模式下,雪佛龙(红色圆圈)几乎看不见。
如何在列表中设置雪佛龙的颜色。
struct ContentView: View
var body: some View
NavigationView
List
Line(text: "Line 1")
Line(text: "Line 2")
Line(text: "Line 3",selected: true)
Line(text: "Line 4")
Line(text: "Line 5")
struct Line: View
var text :String
var selected = false
@Environment(\.colorScheme) var colorScheme
var body: some View
NavigationLink(destination: Text("D")) Text(text)
.listRowBackground(selected ? Color.blue : Color(.systemBackground))
.foregroundColor(selected ? Color.white : Color(.label))
.onTapGesture(perform: print ("tap")
)
【问题讨论】:
【参考方案1】:标准的人字形不是光栅图像的符号,这里是
这就是为什么它不会对任何变色修饰剂做出反应。
解决方案,禁用标准 chevron 并使用自己的自定义,(列表的行为相同),如下所示
HStack
Text(text)
NavigationLink(destination: Text("D")) EmptyView() // disabled !
Image(systemName: "chevron.right") // << custom !!
.foregroundColor(Color.red) // any color !!!
【讨论】:
然后,当您进入编辑模式时,重新发明的人字形仍然可见,因为为什么要考虑 UIKit 开箱即用支持的所有边缘情况,对吧?这绝不是一个好的解决方案。【参考方案2】:在我的环境中,默认的 chevron 显示在自定义的 chevron 下。
添加不透明度(0),它可以工作。
NavigationLink(destination: Text("D")) EmptyView()
.opacity(0) // Add this
【讨论】:
这是正确答案。应该有更多的赞成票。【参考方案3】:您可以使用accentColor
属性:
struct ContentView: View
var body: some View
NavigationView
List
Line(text: "Line 1")
Line(text: "Line 2")
Line(text: "Line 3",selected: true)
Line(text: "Line 4")
Line(text: "Line 5")
.accentColor(.black)
【讨论】:
以上是关于在 NavigationView 的 SwiftUI 列表中设置雪佛龙的颜色的主要内容,如果未能解决你的问题,请参考以下文章
NavigationView 中的 ListView 不滚动
如何在android中刷新navigationview的headview内容
Android NavigationView 导航抽屉的使用