1

这是我尝试开始工作的示例:

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 只是一些带有文本 hello world 的视图。

我正在尝试复制 Apple Music 的导航风格。我尝试将 aButton放入,NavigationLink但在文本上点击它不会改变视图,而且我无法找到一种方法来可靠地同时在点击时改变行的颜色。同样在某种方法中,我设法让它工作,但是颜色动画的方式是不同的,即它从 A 褪色到 B,超过约 100 毫秒,而我想要实现的是立即在状态之间制作动画(比如在苹果音乐)。

我目前的方法是使用 a List,将其放入NavigationLinks其中,然后通过给它一个高度来切断整个视图。这样我就可以把它和其他内容放在一起。

它现在工作正常,但是每当我单击一行并返回时,该行仍然突出显示,而它不应该突出显示。有没有办法让它在以某种方式返回屏幕时取消选择?

我认为这个错误是由Lista 内部引起的ScrollView,因为当我删除时ScrollView,列表正常工作,并且没有这个突出显示错误。但我需要能够将我的内容放在列表中,并且我不打算让列表占据整个屏幕。

有没有办法用这种方法修复这个错误?我也愿意在不使用List.

4

1 回答 1

0

试图使用ForEach而不是List?使用行视图(CustomRow),您可以在其中传递链接项目并设置自定义分割线、背景等...

ForEach(links, id: \.self) { link in
    NavigationLink(destination: TestView()) {
       CustomRow(item: link)
    }
  }
.frame(height: 178)
于 2020-05-11T15:58:49.437 回答