Как обновить элемент внутри, если TabView с .tabViewStyle(.page) в ios ниже 17?IOS

Программируем под IOS
Ответить
Гость
 Как обновить элемент внутри, если TabView с .tabViewStyle(.page) в ios ниже 17?

Сообщение Гость »


В моем проекте мы работаем с постоянным обновлением компонентов. На определенном экране у нас есть 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()
}
}
}
}
При нажатии кнопки ничего не происходит, но если я меняю TabView на ScrollView, работает:

Код: Выделить всё

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()
}
}
}
}
I tried manage the update using State and Binding, but nothing works
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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»