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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:25:26