Модальное увольнение во время переходов просмотра в SwiftUI [закрыто]IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Модальное увольнение во время переходов просмотра в SwiftUI [закрыто]

Сообщение Anonymous »

Я столкнулся с проблемой в SwiftUI, когда модальные окна автоматически закрываются во время переходов между представлениями внутри ZStack. В частности, я переключаюсь между двумя представлениями, используя условие if, управляемое переменной состояния. Одно из представлений включает кнопку, которая представляет модальное окно с расширением .sheet. Однако когда состояние меняется и приложение переключается на другой вид, модальное окно закрывается, даже если пользователь с ним не взаимодействовал.
В моем более крупном приложении ситуация более сложная. Приложение изначально было создано с использованием основного кода UIKit. Сейчас я работаю над переходом на SwiftUI. При переходах UIWindow в UIKit я раньше не сталкивался с этой проблемой, поскольку модальное окно оставалось открытым независимо от изменений иерархии представлений.
Модальное окно представлено не непосредственно представлением в ZStack, а более глубоким дочерним элементом. вид. Из-за этого у меня нет возможности напрямую контролировать или сохранять состояние модального окна во время этих переходов. Это создает проблему, когда ожидается, что модальное окно останется открытым при изменении представления.
Похоже, что SwiftUI рассматривает переключение между условиями if в ZStack как полное удаление и воссоздание иерархии представлений, что приводит к закрытию модального окна. Существует ли рекомендуемый подход для предотвращения закрытия модальных окон во время таких переходов?
КОД:

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

      @main
struct ProjectApp: App {
@State private var showSecondView = false // State variable to control which view is displayed

var body: some Scene {
WindowGroup {
ZStack {
if showSecondView {
SecondaryContentView()
} else {
PrimaryContentView()                }
}
.onAppear {
startTimer()
}
}
}

private func startTimer() {
// Create a timer to switch between views every 10 seconds
Timer.scheduledTimer(withTimeInterval: 5.0, repeats: true) { _ in
showSecondView.toggle() // Toggle between ContentView and SecondContentView
}
}
}

struct PrimaryContentView: View {

@State private var isModalPresented = false // State to control modal presentation

var body: some View {
VStack {
Image(systemName: "heart")
.imageScale(.large)
.foregroundStyle(.tint)
Text("Hello, world!")

Button(action: {
isModalPresented.toggle() // Open the modal when the button is tapped
}) {
Text("Open Modal")
.padding()
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(8)
}
}
.padding()
.sheet(isPresented: $isModalPresented) {
VStack {
Image(systemName: "star.fill")
.resizable()
.scaledToFit()
.frame(width: 150, height: 150)
.foregroundColor(.yellow)
Text("This is a modal view.")
.font(.headline)
.padding()
}

}
.padding()
}
}

struct SecondaryContentView: View {
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundStyle(.tint)
Text("Hello, world!")
}
.padding()
}
}
Я попробовал несколько подходов, чтобы решить эту проблему:
  • Я использовал наложение для второго представления, чтобы избежать удаление первого с помощью модального окна. Однако наложение остается под модальным окном, что не является предполагаемым поведением.
  • Я также пробовал использовать модификатор .fullScreenCover для моего второго представления, но SwiftUI позволяет использовать только один .sheet. открываться одновременно, поэтому в моем случае этот подход не работает.
    Я попробовал установить zIndex для управления многоуровневым представлением, но это тоже не решило проблему.< /li>


Подробнее здесь: https://stackoverflow.com/questions/793 ... in-swiftui
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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