这是我要开始工作的示例:
struct ContentView: View {
let links = ["Item 1", "Item 2", "Item 3", "Item 4"]
var body: some View {
NavigationView {
ScrollView {
Text("My Title")
List(links, id: \.self) {
link in
NavigationLink(destination: TestView()) {
Text(link)
.padding(.vertical, 4)
.frame(maxWidth: .infinity, alignment: .leading)
}
}
.frame(height: 178)
Text("Some more content here")
}
}
}
}
注意:TestView只是带有文本问候世界的某些视图。
我正在尝试复制Apple Music的导航样式。我尝试将Button
放在NavigationLink
中,但是在文本上点击它不会改变视图,并且我无法找到一种方法来同时可靠地更改行的颜色时间。同样以某种方式,我设法使其起作用,但是颜色的动画方式不同,即,颜色从A渐变到B,经过约100ms,而我试图实现的是立即在状态之间进行动画(例如苹果音乐)。
我目前的方法是使用List
,将NavigationLinks
放入其中,然后通过赋予高度来切断整个视图。这样,我可以将其与其他内容放在一起。
它现在可以正常工作,但是每当我单击一行并返回时,该行仍会突出显示,而不应该显示。有没有一种方法可以使它以某种方式退回到屏幕时取消选择?
我认为此错误是由List
内的ScrollView
引起的,因为当我删除ScrollView
时,列表正常工作,并且没有此高亮错误。但是我需要能够将内容与列表放在一起,并且我不希望列表占据整个屏幕。
有什么办法可以用这种方法来修复这个错误吗?我也愿意采用其他方法,而无需使用List
。
答案 0 :(得分:0)
尝试使用ForEach
而非List
吗?
通过查看行(CustomRow),您可以在其中传递 link 项目并设置自定义分隔线,背景等...
ForEach(links, id: \.self) { link in
NavigationLink(destination: TestView()) {
CustomRow(item: link)
}
}
.frame(height: 178)