在SwiftUI中,将NavigationLink放置在窗体内时,箭头会自动出现在NavigationLink的尾端。该箭头的颜色如何更改?
struct example: View {
var body: some View {
NavigationView {
Form {
NavigationLink(destination: Text("Example destination")) {
Text("Example link")
}
}
}
}
}
答案 0 :(得分:6)
Form
/ List
在重用UITableView
,更改公开指标tintColor
一直是一个问题。 *请参阅:Question
因此,.accentColor
在这里也不起作用也就不足为奇了。
建议主要是将其替换为自定义视图。
因此,让我们在SwiftUI
中进行相同的操作。
struct ContentView: View {
var body: some View {
NavigationView {
Form {
//Overlap NavigationLink and our Custom Cell arrangement
ZStack {
//Create a NavigationLink without the disclosure indicator
NavigationLink(destination: Text("Hello, World!")) {
EmptyView()
}
//Replicate the default cell
HStack {
Text("Custom UI")
Spacer()
Image(systemName: "chevron.right")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 7)
.foregroundColor(.red) //Apply color for arrow only
}
.foregroundColor(.purple) //Optional: Apply color on all inner elements
}
//Default style
NavigationLink(destination: Text("Hello, World!")) {
Text("Default UI")
}
}
}
}
}
NavigationLink
和EmptyView
摆脱了默认的披露指标HStack
是我们的自定义单元格View
,它复制默认单元格排列
Image(systemName: "chevron.right")
是我们替代封顶指示器的一种方法.foregroundColor
将使我们能够在整个HStack
或仅Image
(您的选择)上飞溅一种颜色ZStack
允许将以上两个重叠。
NavigationLink
基本上可以轻敲整个单元格答案 1 :(得分:1)
您可以提供自定义视图并隐藏默认的 NavigationLink 箭头:
NavigationLink(destination: Text("Hello, World!")) {}
.opacity(0)
.background(
HStack {
Text("Custom UI")
Spacer()
Image(systemName: "chevron.right")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 7)
.foregroundColor(.red) //Apply color for arrow only
}
.foregroundColor(.purple)
)
或者将 NavigationLink 指定为背景(这样您就可以自动调整大小):
HStack {
Text("Custom UI")
Spacer()
Image(systemName: "chevron.right")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 7)
.foregroundColor(.red) //Apply color for arrow only
}
.foregroundColor(.purple)
.background(
NavigationLink(destination: Text("Hello, World!")) {}
.opacity(0)
)