SwiftUI разделяет состояния подпредставления для разных ориентацийIOS

Программируем под IOS
Ответить
Anonymous
 SwiftUI разделяет состояния подпредставления для разных ориентаций

Сообщение Anonymous »

У меня есть представление SwiftUI, которое имеет разные макеты для разных ориентаций интерфейса. Я реализую это, используя что-то вроде (только ради минимально воспроизводимого примера кода я включил его ниже).

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

import SwiftUI

struct ContentView: View {

@Environment(\.dismiss) private var dismiss
@Environment(\.verticalSizeClass) private var verticalSizeClass
@Environment(\.horizontalSizeClass) private var horizontalSizeClass

var body: some View {
ZStack(content: {
if verticalSizeClass == .regular {
testView
} else {
testView
}
})
}

var testView: some View {
TestView()
}

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

 struct TestView: View {
@State var isSelected = false

var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundStyle(.tint)
Text("Hello, world!")
}
.padding()
.overlay {
if isSelected {
RoundedRectangle(cornerRadius: 5)
.stroke(.yellow, lineWidth: 3.0)
}
}
.gesture(
TapGesture(count: 1)
.onEnded({ _ in
isSelected.toggle()
})
)
}
}
При авторотации SwiftUI будет рассматривать TestView как отдельные представления с разными идентификаторами, и, следовательно, представление потеряет свое текущее состояние (

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

isSelected
в приведенном выше примере) и будет перерисован как новое новое представление.
Каков правильный способ решения такой проблемы и можно ли присвоить идентификатор отдельные подпредставления, чтобы они сохраняли состояние при авторотации? Потому что в исходном проекте есть много общих подпредставлений в обоих направлениях.

Подробнее здесь: https://stackoverflow.com/questions/790 ... ientations
Ответить

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

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

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

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

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