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

如何通过Segue将VC2以底部表单形式呈现为VC1的模态视图?

可以通过Segue实现底部半屏模态呈现功能

完全可以实现,你只需要在prepare(for:sender:)方法中配置目标视图控制器的UISheetPresentationController即可,同时保留现有的回调逻辑。以下是修改后的代码:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showAddChangeGas" {
        if let vc2 = segue.destination as? AddChangeGasViewController {
            // 原有回调和参数配置
            vc2.gasIndex = gasIndex
            vc2.callback = {
                self.gasTableView.reloadData()
                self.gasIndex = nil
            }
            
            // 配置底部半屏模态
            if let sheet = vc2.sheetPresentationController {
                // 设置支持的尺寸:medium是半屏,large是全屏(可选)
                sheet.detents = [.medium(), .large()]
                // 显示顶部拖拽手柄
                sheet.prefersGrabberVisible = true
                // 可选:设置模态背景是否贴合边缘
                sheet.prefersEdgeAttachedInCompactHeight = true
                sheet.widthFollowsPreferredContentSizeWhenEdgeAttached = true
            }
        }
    }
}

额外注意事项:

  • 确保你的Segue在Storyboard中的Presentation属性设置为Automatic或Page Sheet(默认就是这两种,无需额外修改)。
  • 该方案仅适用于iOS 15及以上版本,若需兼容更低版本需自定义实现,但iOS 15+已覆盖绝大多数用户。
  • 如果VC2被包裹在UINavigationController中,需获取导航控制器的sheetPresentationController而非VC2的:
    if let navController = segue.destination as? UINavigationController,
       let vc2 = navController.topViewController as? AddChangeGasViewController {
        // 配置vc2参数和回调...
        
        if let sheet = navController.sheetPresentationController {
            sheet.detents = [.medium(), .large()]
            sheet.prefersGrabberVisible = true
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:38:28