SwiftUI中Sheet Modal无法完整展示视图,iPad横屏宽度受限如何解决?
方案1:iOS 16+ 原生实现
直接在sheet内容视图上添加如下修饰符即可解除iPad横屏默认宽度限制:
struct DrawingViewView: View { var body: some View { Rectangle() .fill(Color.red) .frame(width: 1500, height: 1000) // 新增修饰符 .presentationSizing(.fittingSize) .presentationCompactAdaptation(.none) } }
.presentationSizing(.fittingSize)会让sheet自动适配你内容的实际尺寸,不会强制压缩到系统默认的最大宽度.presentationCompactAdaptation(.none)禁用iPad横屏下的sheet紧凑适配规则,避免宽度被限制
方案2:iOS 15及更低版本兼容实现
通过桥接UIKit修改sheet底层配置,自定义尺寸:
- 先添加View扩展
extension View { func customSheetSize(size: CGSize) -> some View { self.background(SheetConfigurator(size: size)) } } struct SheetConfigurator: UIViewRepresentable { let size: CGSize func makeUIView(context: Context) -> UIView { let view = UIView() DispatchQueue.main.async { guard let parentVC = view.window?.rootViewController?.presentedViewController else { return } parentVC.preferredContentSize = size if let sheet = parentVC.sheetPresentationController { // 可根据需求调整圆角、显示指示器等配置 sheet.prefersScrollingExpandsWhenScrolledToEdge = false } } return view } func updateUIView(_ uiView: UIView, context: Context) {} }
- 在你的内容视图调用扩展
struct DrawingViewView: View { var body: some View { Rectangle() .fill(Color.red) .frame(width: 1500, height: 1000) .customSheetSize(size: CGSize(width: 1500, height: 1000)) } }
PencilKit适配说明
上述方案不需要使用fullScreenCover,可直接规避fullScreenCover场景下PKCanvasView的坐标偏移问题。如果后续需要使用fullScreenCover,只需要在PKCanvasView外层包裹一个普通的容器视图,显式设置edgesIgnoringSafeArea(.all)即可修复坐标偏移问题。
内容的提问来源于stack exchange,提问作者jakob witsch
相关产品推荐
相关产品推荐

