Как определить, будет ли всплывающее окно отображаться как всплывающее окно или лист в SwiftUI?

В SwiftUI при отображении всплывающего окна оно будет отображаться либо как всплывающее окно, либо как лист, в зависимости от устройства (iPad или iPhone) и доступного места в окне.

Есть ли правильная эвристика, чтобы проверить, будет ли всплывающее окно отображаться как всплывающее окно или лист?

Например, на iPad всплывающее окно будет отображаться в виде листа при многозадачности и в вертикальном положении или в горизонтальном положении при размере экрана в четверть экрана.

2 ответа

Ответ здесь заключается в том, что мне нужно было перейти от родительского представления, которое представляло всплывающее окно. Без этого дочернее представление читало это было доступно для него (что всегда компактно внутри всплывающего окна).

На основании моего тестирования вы МОЖЕТЕ использовать @Environment(\.horizontalSizeClass)выяснить:

      struct ContentView: View {
    
    @Environment(\.horizontalSizeClass) var sizeClass
    
    @State private var showPopover = false
    
    var body: some View {
        Button("Show PopOver") {
            showPopover = true
        }
        .popover(isPresented: $showPopover) {
            Text(sizeClass == .regular ? "regular size" : "compact size")
                .frame(width: 300, height: 300)
        }
    }
}

Другие вопросы по тегам