You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中Popover为何在iPhone上全屏显示?

SwiftUI Popover在iPhone上全屏显示的原因及解决办法

这既不是项目配置问题,也不是代码错误——这是SwiftUI的默认行为:在iPhone设备上,popover组件会自动适配为全屏的sheet形式展示,只有在iPad等大屏设备上才会显示为悬浮的弹窗样式。

如果想让iPhone上也保持悬浮弹窗的样式,可以通过presentationCompactAdaptation(_:)修饰符指定适配策略:

修改后的触发代码

@State private var showPopover = false
var body: some View {
    Button(action: {
        self.showPopover = true
    }) {
        Text("Show Popover")
    }
    .popover(isPresented: $showPopover) {
        PopoverView(showPopover: $showPopover)
    }
    // 指定iPhone上以弹窗形式展示
    .presentationCompactAdaptation(.popover)
}

另外,原PopoverView的关闭按钮缺少逻辑,需要添加绑定变量来控制弹窗的显示状态:

修改后的PopoverView代码

struct PopoverView: View {
    @Binding var showPopover: Bool // 添加绑定变量
    @State var adaptableHeight = CGFloat(100)
    
    var body: some View {
        VStack {
            Text("Popover Content")
            Button("Dismiss") {
                showPopover = false // 关闭弹窗
            }
        }
        .padding()
        .frame(height: adaptableHeight)
    }
}

这样修改后,iPhone上的popover就会以悬浮弹窗的形式展示,而非全屏。

内容的提问来源于stack exchange,提问作者Enamul Haque

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 02:02:20