В моем проекте мы работаем с постоянным обновлением компонентов. На определенном экране у нас есть TabView с динамическим списком элементов, эти элементы могут обновляться. Проблема в следующем: если эти элементы находятся внутри TabView с .tabViewStyle(.page), обновленный элемент не обновляется. Я создал пример кода, который может воспроизвести такое поведение:
Код: Выделить всё
struct TextUIModel: Identifiable, Equatable {
let id = UUID()
let title: String
let state: String
}
public class TextUIViewModel: ObservableObject {
@Published var models: [TextUIModel] = [
.init(title: "Title", state: "1"),
.init(title: "Title", state: "2")
]
func updateModel() {
models[0] = .init(title: "Title", state: "2")
}
}
public struct TextUIModelsContentView: View {
@StateObject var viewModel: TextUIViewModel = .init()
public init() {}
public var body: some View {
if viewModel.models.isEmpty {
Text("Empty")
} else {
TabViewForTExtUIModels(models: viewModel.models)
}
Button("Update states") { viewModel.updateModel() }
}
}
struct TabViewForTExtUIModels: View {
let models: [TextUIModel]
var body: some View {
VStack {
if !models.isEmpty {
TabView {
ForEach(models) { model in
VStack {
Text(model.title)
Text(model.state)
}
}
}
.tabViewStyle(.page)
} else {
EmptyView()
}
}
}
}
Код: Выделить всё
struct TabViewForTExtUIModels: View {
let models: [TextUIModel]
var body: some View {
VStack {
if !models.isEmpty {
ScrollView {
LazyHStack {
ForEach(models) { model in
VStack {
Text(model.title)
Text(model.state)
}
}
}
}
} else {
EmptyView()
}
}
}
}
To have the behavior of a TabView with .tabViewStyle(.page) is a part of the demand
I tried a lot of things but nothing works, only taking off the TabView that is not an option.
Can anyone help me ?
Источник: https://stackoverflow.com/questions/781 ... -ios-lower
Мобильная версия