问题描述
我正在尝试创建一个包含部分的 .burger div{
width: 30px;
height: 3px;
background-color: #f7082d;
margin: 7px;
transition: all 0.3s ease;
}
.nav-links
{
display: flex;
justify-content: space-around;
width: 30%;
}
.nav-links li
{
list-style: none;
}
.nav-links a
{
color: #000;
text-decoration: none;
letter-spacing: 3px;
font-weight: bold;
font-size: 2vh;
}
每个项目都符合“id”,我用项目的 id 标记 PickerView
(这是唯一的,我确认没有冲突)
Text
似乎忽略了我分配的标签,并为每个部分选择了具有相同对应索引的所有行
我还尝试用随机 UUID 标记每个项目以检查行为,它似乎继续
PickerView
解决方法
tag
应该与 selection
的类型相同,因为它用于匹配选择的行。在这种情况下不应修改 id
,因为它会完全重新初始化选择器。
提供的代码不可测试,所以这里只是一个解决方案的演示(简化了您的场景的复制)。
使用 Xcode 12.1 / iOS 14.1 测试。
struct Pair: Hashable {
var section = ""
var row = -1
}
struct ExperimentPickerView: View {
var sections = ["A","B","C"]
var rows = Array(0..<5)
@State private var picked = Pair(section: "B",row: 2) // << here !! (initialised demo)
var body: some View {
Picker("active",selection: $picked) {
ForEach(sections,id: \.self) { section in
Section(header: Text("\(section)").bold()) {
ForEach(rows,id: \.self) { i in
Text("\(section) \(i)")
.tag(Pair(section: section,row: i)) // << match !!
}
}
}
}.onReceive([self.picked].publisher.first()) { (value) in
print(value)
}
}
}