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
相关产品推荐
相关产品推荐

