SwiftUI中如何判断一个popover是显示为popover还是sheet?
How to determine if a popover will be displayed as a popover or sheet in SwiftUI?
在 SwiftUI 中,当显示弹出窗口时,它将显示为弹出窗口或 sheet,具体取决于设备(iPad 或 iPhone)和 window space可用。
是否有正确的试探法来检查弹出窗口是显示为弹出窗口还是 sheet?
例如,在 iPad 上,当多任务处理和垂直或水平四分之一屏幕大小时,弹出窗口将显示为 sheet。
根据我的测试,您可以使用 @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)
}
}
}
这里的答案是我需要从呈现弹出窗口的父视图向下传递 horizontalSizeClass
。
.environment(\.horizontalSizeClass, horizontalSizeClass)
如果没有这个,子视图正在读取它可用的 horizontalSizeClass
(它在弹出窗口中总是紧凑的)。
在 SwiftUI 中,当显示弹出窗口时,它将显示为弹出窗口或 sheet,具体取决于设备(iPad 或 iPhone)和 window space可用。
是否有正确的试探法来检查弹出窗口是显示为弹出窗口还是 sheet?
例如,在 iPad 上,当多任务处理和垂直或水平四分之一屏幕大小时,弹出窗口将显示为 sheet。
根据我的测试,您可以使用 @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)
}
}
}
这里的答案是我需要从呈现弹出窗口的父视图向下传递 horizontalSizeClass
。
.environment(\.horizontalSizeClass, horizontalSizeClass)
如果没有这个,子视图正在读取它可用的 horizontalSizeClass
(它在弹出窗口中总是紧凑的)。