ios - SwiftUI:在动态列表顶部添加视图会导致视图缩小
问题描述
我有一个简单的SwiftUI
列表,它从发布者异步显示数字Combine
,当我View
在列表顶部添加一个作为标题视图时,我面临一个奇怪的收缩或闪烁Content View
,当数据被重绘时,标题发生从发布者返回:
这是具有发布者的视图模型类:
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)
}
}
这是与上述视图模型交互的ContentView
结构:
struct ContentView: View {
@ObservedObject var viewModel: ViewModel
var body: some View {
List {
VStack {
Rectangle()
Text("Some Text")
Text("Some Other Very Long Text Some Other Some Other Long Text")
}
.background(Color.red)
ForEach(viewModel.items, id: \.self) { item in
Text("\(item)")
}
}
}
}
结果如下:
我试图将VStack
列表顶部的 分离到外部View
但没有任何改变。
是什么导致这种奇怪的收缩,有没有办法避免它?
解决方案
解决方法是使用显式列表行插入,如下所示...
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)
}
推荐阅读
- boost - boost::asio::thread_pool - 如何在工作完成前取消工人?
- gitlab - 合并请求批准并合并后为 gitlab 分支添加标签
- javascript - 在 React + Typescript 中打开侧边栏时使背景变暗
- angular - 解析地图响应角度
- list - 以有效的方式从scala中的序列中过滤选项
- sql - 触发增加参数值
- ag-grid - 在 Ag Grid 中使用复杂对象进行分组
- python-3.x - 如何将公钥从字符串类型转换为 PEM
- algorithm - 解决循环依赖的算法?
- angular - Angular PrimeNG 面包屑不会动态变化