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

打开UISheetPresentationController时如何让下层ViewController不缩小

问题解决方法

你要实现的效果可以通过配置UISheetPresentationController的相关属性实现,同时你的现有代码存在遗漏调用present方法的问题,修正后的完整方案如下:

1. 核心属性说明

  • iOS 16 及以上系统:直接使用系统提供的prefersPresentingViewControllerFullScreenLayout属性,设为true即可让后方视图控制器保持原有大小不被缩放。
  • iOS 15 系统:通过设置sourceView和sourceRect,让系统判定弹窗从当前视图区域弹出,即可避免后方视图被缩小。
  • 若不需要后方视图变暗,可以额外设置largestUndimmedDetentIdentifier为你当前使用的detent标识,或者直接修改dimmingView的透明度。

2. 修正后的完整代码

@objc func registerSheet(){
    let registrationSheet = RegistrationFormViewController()
    // 统一设置present,不要只写在else分支
    registrationSheet.modalPresentationStyle = .pageSheet
    if #available(iOS 15.0, *) {
        if let sheet  = registrationSheet.presentationController as? UISheetPresentationController{
            sheet.detents = [.medium()]
            // 关闭后方视图缩小
            if #available(iOS 16.0, *) {
                sheet.prefersPresentingViewControllerFullScreenLayout = true
            } else {
                // iOS15兼容方案
                sheet.sourceView = self.view
                sheet.sourceRect = self.view.bounds
            }
            // 可选:如果不需要后方视图变暗,加上这行
            sheet.largestUndimmedDetentIdentifier = .medium
        }
    }
    self.present(registrationSheet, animated: true, completion: nil)
}

3. 效果验证

运行代码后弹出medium高度的底部表单时,后方主视图控制器会保持原有布局,不会出现缩小、上移的效果,符合你的需求。

内容的提问来源于stack exchange,提问作者Mr N

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:39:01