#ios #xcode #swiftui #swiftui-environment
Вопрос:
У меня есть представление @Environment(.presentationMode) var presentationMode: Binding<PresentationMode>
для пользовательского действия «отклонить», основанного на опубликованном значении, в соответствии с некоторой логикой, подобной этой:
.onAppear(perform: {
viewModel.cancellable = viewModel.$shouldPopBack.sink(receiveValue: { shouldPopBackToHome in
if shouldPopBackToHome {
presentationMode.wrappedValue.dismiss()
}
})
})
В этом представлении также есть еще один вариант представления листа
Button(action: {
shouldNavigateToQRCodeScanner = true
}, label: {
Text("Scan QR code")
.padding(.horizontal)
}).sheet(isPresented: $shouldNavigateToQRCodeScanner, content: {
QRCodeScannerView()
})
Проблема здесь в том, что когда у меня @Environment(.presentationMode)
QRCodeScannerView
есть инициализация дважды, когда я удаляю режим представления, он работает нормально.
Обновление Я пробовал то же самое поведение в тестовом проекте, и это то же самое
struct ContentView: View {
@Environment(.presentationMode) var presentationMode: Binding<PresentationMode>
@State var isPresentd: Bool = false
var body: some View {
NavigationView {
Button(action: {
isPresentd = true
}, label: {
Text("Navigate to Second View")
})
.sheet(isPresented: $isPresentd, content: {
SecondView()
})
}
}
}
struct SecondView: View {
init() {
print("Initialized")
}
var body: some View {
Text("Second View")
}
}
У него та же проблема
Комментарии:
1. Представление SwiftUI-это значение, оно может быть создано много раз механизмом рендеринга SwiftUI, оно не находится под нашим контролем (в большинстве случаев). Так что просто не полагайтесь на это.
2. Проблема в том, что он деинфицирует модель представления, и она больше не содержит никаких данных