UISheetPresentationController在不同设备上显示不一致的问题
解决Bottom Sheet背景缩小的问题
你看到的背景视图缩小、变亮的效果,是UISheetPresentationController在紧凑高度环境(比如iPhone横屏)下的默认表现;而设计师设备上的背景变暗、保持全屏的样式,是常规高度环境(iPhone竖屏)的默认效果,也是苹果地图等系统应用采用的配置。要统一实现后者的表现,只需给UISheetPresentationController添加两个关键配置:
修改你的segue代码如下:
import UIKit public class BottomSheetLargeSegue: UIStoryboardSegue { override public func perform() { // 明确设置弹窗的展示样式为pageSheet,确保启用SheetPresentationController destination.modalPresentationStyle = .pageSheet guard let sheetController = destination.presentationController as? UISheetPresentationController else { return } sheetController.detents = [.large()] sheetController.prefersGrabberVisible = true sheetController.preferredCornerRadius = 30 // 强制在紧凑高度环境下保持底部附着的弹窗样式 sheetController.prefersEdgeAttachedInCompactHeight = true // 让弹窗宽度铺满屏幕,而非自适应内容尺寸 sheetController.widthFollowsPreferredContentSizeWhenEdgeAttached = false source.present(destination, animated: true) } }
关键配置说明
prefersEdgeAttachedInCompactHeight = true:关闭紧凑高度环境下的popover式展示逻辑,强制弹窗保持底部弹出的样式,避免背景视图缩小。widthFollowsPreferredContentSizeWhenEdgeAttached = false:让弹窗宽度匹配屏幕宽度,和常规高度下的表现一致,不会出现窄弹窗+缩小背景的情况。
另外需要确认:你的项目部署目标是iOS 15.0及以上(UISheetPresentationController仅在iOS15+可用),且目标控制器没有自定义布局干扰弹窗的默认样式。
内容的提问来源于stack exchange,提问作者Simon McLoughlin
相关产品推荐
相关产品推荐

