gpt4 book ai didi

ios - SwiftUI 列表行在点击后更改其背景颜色

转载 作者:行者123 更新时间:2023-12-05 07:14:16 25 4
gpt4 key购买 nike

我有一个包含行的列表,当我选择它们时,它们会更改其行背景颜色 (UITableViewCellSelectedBackground)。我不想要这种行为,所以我不想更改 didSelect 上的行背景颜色。

我曾尝试更改点击事件的背景颜色(与正常状态背景颜色相同),但它不起作用。这是当前代码:

var body: some View {
List {
ForEach (vars){ var in
ZStack {
Foo(a: var.name)
.listRowInsets(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0))
NavigationLink(destination: FooDetailView(b: var)) {
EmptyView()
}.buttonStyle(PlainButtonStyle())
}
}.listRowBackground(Color(#colorLiteral(red: 0.03921568627, green: 0.03921568627, blue: 0.03921568627, alpha: 1)))
}
}

这是点击事件的不良行为:

enter image description here

enter image description here

选择一行后

最佳答案

复制粘贴到你的 Playground 并查看第一行、第二行、第三行和最后一行的区别...

import SwiftUI
import PlaygroundSupport

struct ContentView: View {
//@State var selected
var body: some View {
NavigationView {
List {
ZStack {
NavigationLink(destination: Text("A")) {
Text("A")
}
.background(Color.yellow)
}
.border(Color.red)

ZStack {
NavigationLink(destination: Text("B")) {
Text("B")
}
.background(Color.yellow)
}
.border(Color.red)
.listRowInsets(EdgeInsets())

ZStack {
GeometryReader { proxy in
NavigationLink(destination: Text("C")) {
Text("C").frame(height: proxy.size.height)
}
.background(Color.yellow)
}
}
.border(Color.red)
.listRowInsets(EdgeInsets())

ZStack {
GeometryReader { proxy in
NavigationLink(destination: Text("D")) {
Text("D").frame(height: proxy.size.height)
}
}
.background(Color.yellow.opacity(0.4))
.padding(.horizontal)
}
.background(Color.yellow.opacity(0.2))
.listRowInsets(EdgeInsets())
}
.listRowBackground(Color.blue)
}
}
}

PlaygroundPage.current.setLiveView(ContentView())

我在那里放了一些不透明度,所以所有的变化都更明显。

简化的行,您可以将其用作模板来创建自己的 RowView(...)

ZStack {
Color.yellow
GeometryReader { proxy in
NavigationLink(destination: Text("D")) {
Text("D").frame(height: proxy.size.height)
}
}
.padding(.horizontal)
}
.listRowInsets(EdgeInsets())

最后,您自己的 RowView() 看起来像

ZStack {
// background color
Color.yellow.frame(maxWidth: .infinity)
// your row view
RowView()
NavigationLink(destination: Text("D")) {
EmptyView()
}
.padding(.horizontal)
}
.listRowInsets(EdgeInsets())

还有一些例子 enter image description here

哪里行 View ()

struct RowView: View {
var body: some View {
HStack {
VStack(alignment: .leading) {
Text("Title").font(.title)
HStack {
Text("detail")
}
}
Spacer()
Text("12:55").font(.title).padding()
}.padding()
}
}

关于ios - SwiftUI 列表行在点击后更改其背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59967159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com