如何确定在 SwiftUI 中弹出框是否显示为弹出框或工作表?

发布于 2025-01-10 19:28:30 字数 165 浏览 1 评论 0原文

在 SwiftUI 中,当显示弹出框时,它将显示为弹出框或工作表,具体取决于设备(iPad 或 iPhone)和可用的窗口空间。

是否有正确的启发式方法来检查弹出窗口是否显示为弹出窗口或工作表?

例如,在 iPad 上,当多任务处理且垂直或水平且四分之一屏幕大小时,弹出框将显示为工作表。

In SwiftUI when a popover is displayed, it will display as either a popover or sheet depending on the device (iPad or iPhone) and window space available.

Is there a correct heuristic to check if the popover will be displayed as a popover or a sheet?

For example, on iPad, a popover will show as a sheet when multitasking and vertical or when horizontal at quarter-screen size.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

沩ん囻菔务 2025-01-17 19:28:30

这里的答案是我需要从呈现弹出窗口的父视图传递horizo​​ntalSizeClass
.environment(\.horizo​​ntalSizeClass, Horizo​​ntalSizeClass) 如果没有这个,子视图将读取可用的 horizo​​ntalSizeClass (它在弹出窗口中始终是紧凑的)。

The answer here is that I needed to pass down horizontalSizeClass from the parent view that was presenting the popover.
.environment(\.horizontalSizeClass, horizontalSizeClass) Without this, the child view was reading the horizontalSizeClass that was available to it (which is always compact within a popover).

水波映月 2025-01-17 19:28:30

根据我的测试,您可以使用 @Environment(\.horizo​​ntalSizeClass) 来查找:

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)
        }
    }
}

在此处输入图像描述

Based on my testing you CAN use @Environment(\.horizontalSizeClass) to find out:

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)
        }
    }
}

enter image description here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文