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

如何在Present新ViewController时避免原ViewController缩小?

问题解决:Present页面时锁定原ViewController

你想要实现的是**Present新页面后,原ViewController被锁定(无法交互)**的效果(图1:弹窗式页面,原背景变暗且不可操作),但当前仅设置modalPresentationStyle后,原页面仍可交互或弹窗可被下拉关闭(图2)。只需补充一个关键参数即可解决问题:

修改后的代码

let vc = ExampleVC(nibName: "ExampleVC", bundle: nil)
let naviVC = UINavigationController(rootViewController: vc)
naviVC.modalPresentationStyle = .pageSheet
naviVC.isModalInPresentation = true // 关键设置:锁定原页面交互,阻止下拉关闭弹窗

DispatchQueue.main.async {
    self.present(naviVC, animated: true, completion: nil)
}

参数说明

  • isModalInPresentation(iOS 13+):设置为true后,用户无法通过下拉手势关闭模态页面,同时原ViewController会被完全锁定,无法进行任何交互,完全匹配图1的需求。
  • modalPresentationStyle:保持.pageSheet即可,它会提供弹窗式的展示效果,搭配前者就能实现背景变暗且原页面不可操作的状态。

如果需要让弹窗尺寸更贴合图1的样式,还可以在ExampleVC中重写preferredContentSize来指定弹窗宽高:

override var preferredContentSize: CGSize {
    get { CGSize(width: 320, height: 480) } // 自定义尺寸,按需调整
    set { super.preferredContentSize = newValue }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 14:25:05