gpt4 book ai didi

scrollview - 滚动时 ScrollView 中作为列表项的内容消失 (swiftui),为什么?

转载 作者:行者123 更新时间:2023-12-03 23:20:52 28 4
gpt4 key购买 nike

@Asperi 的解决方案,ScrollView().id(UUID().uuidString)。

列表项中有一个 ScrollView ,当我滚动列表时, ScrollView 中的内容消失了。

我认为问题是关于 ScrollView 和列表可重用项目冲突。

如果我删除 ScrollView (只是 hstack{}),则什么都不会消失。所以我认为这是 ScrollView 的问题。有什么理想吗?

struct ContentView: View {
var body: some View {
List {
ForEach(0...100, id: \.self) { _ in
ItemView().padding()
}
}
}
}

struct ItemView: View {
var body: some View {
VStack(alignment: .leading) {
Text("Tag list:")
ScrollView(.horizontal, showsIndicators: false) {
HStack {
ForEach(0...8, id: \.self) { _ in
TagView1()
}
}
}.id(UUID().uuidString) /// <- fix
}
}
}

struct TagView1: View {
var body: some View {
Text("Tag\(String(UUID().uuidString.prefix(5)))")
.foregroundColor(.secondary)
.padding(.horizontal, 2)
.background(RoundedRectangle(cornerRadius: 4).stroke(Color.secondary.opacity(0.5)))
.padding(1)
}
}

最佳答案

如果我正确理解了什么消失了(我假设你的意思是在垂直滚动时列出行),那么是的,这是由于 List重用/缓存优化问题。

以下方法应该有效(使用 Xcode 11.2/iOS 13.2 测试)

struct ItemView: View {
var body: some View {
VStack {
Text("Tag list:")
ScrollView(.horizontal, showsIndicators: false) {
HStack {
ForEach(0...8, id: \.self) { _ in
TagView().padding()
}
}
}.id(UUID().uuidString) // << here is a fix !
}
}
}

关于scrollview - 滚动时 ScrollView 中作为列表项的内容消失 (swiftui),为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59810913/

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