Ios SwiftUI:在动态列表顶部添加视图会导致视图收缩
我有一个简单的Ios SwiftUI:在动态列表顶部添加视图会导致视图收缩,ios,swift,swiftui,Ios,Swift,Swiftui,我有一个简单的SwiftUI列表,当我在列表顶部添加一个视图作为标题视图时,该列表异步显示来自合并发布者的数字,当数据从发布者返回时,内容视图被重新绘制时,标题会出现奇怪的收缩或闪烁: class ViewModel: ObservableObject { @Published var items: [Int] = [] var subscriptions = Set<AnyCancellable>() init() { (0...1
SwiftUI
列表,当我在列表顶部添加一个视图作为标题视图时,该列表异步显示来自合并
发布者的数字,当数据从发布者返回时,内容视图
被重新绘制时,标题会出现奇怪的收缩或闪烁:
class ViewModel: ObservableObject {
@Published var items: [Int] = []
var subscriptions = Set<AnyCancellable>()
init() {
(0...10)
.publisher
.delay(for: .seconds(3), scheduler: DispatchQueue.main) //to simulate async call
.sink { (value) in
self.items.append(value)
}
.store(in: &subscriptions)
}
}
以下是具有发布者的视图模型类:
class ViewModel: ObservableObject {
@Published var items: [Int] = []
var subscriptions = Set<AnyCancellable>()
init() {
(0...10)
.publisher
.delay(for: .seconds(3), scheduler: DispatchQueue.main) //to simulate async call
.sink { (value) in
self.items.append(value)
}
.store(in: &subscriptions)
}
}
结果如下:
我试图将列表顶部的VStack
分隔成一个外部视图
,但没有改变
是什么导致了这种奇怪的收缩?有没有办法避免它?修复方法是使用显式列表行插入,如下所示
List {
VStack {
Rectangle()
Text("Some Text")
Text("Some Other Very Long Text Some Other Some Other Long Text")
}
.background(Color.red)
.listRowInsets(EdgeInsets(top: 0, leading: 10, bottom: 0, trailing: 10)
ForEach(viewModel.items, id: \.self) { item in
Text("\(item)")
}
.listRowInsets(EdgeInsets(top: 0, leading: 10, bottom: 0, trailing: 10)
}
修复方法是使用显式列表行插入,如下所示
List {
VStack {
Rectangle()
Text("Some Text")
Text("Some Other Very Long Text Some Other Some Other Long Text")
}
.background(Color.red)
.listRowInsets(EdgeInsets(top: 0, leading: 10, bottom: 0, trailing: 10)
ForEach(viewModel.items, id: \.self) { item in
Text("\(item)")
}
.listRowInsets(EdgeInsets(top: 0, leading: 10, bottom: 0, trailing: 10)
}
这是一个很好的解决办法,你回答了问题的第一部分,但为什么会发生这种情况?这是SwiftUI中的一个大问题吗?@JAHelia,它看起来像一只虫子,但我不确定。你可以向苹果公司发送反馈,他们可以肯定地告诉你。嗯,对我来说似乎不起作用。我最终使用了TableViewController。这是一个很好的解决方法,您回答了问题的第一部分,但为什么会发生这种情况?这是SwiftUI中的一个大问题吗?@JAHelia,它看起来像一只虫子,但我不确定。你可以向苹果公司发送反馈,他们可以肯定地告诉你。嗯,对我来说似乎不起作用。我最终改用了TableViewController。