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

如何在UIKit中实现类似SwiftUI的自定义比例Bottom Sheet Detents?

在UIKit中实现自定义比例的Bottom Sheet Detent

在UIKit里,你可以通过UISheetPresentationController.Detent.custom方法创建自定义比例的底部弹窗detent,效果和SwiftUI的.fraction()一致,具体实现如下:

代码示例

if let sheet = viewControllerToPresent.sheetPresentationController {
    // 创建占屏幕高度10%的自定义detent
    let customFractionDetent = UISheetPresentationController.Detent.custom(identifier: .init("customFraction_0.1")) { context in
        // context.maximumDetentValue对应large detent的高度,即屏幕可用高度最大值
        return context.maximumDetentValue * 0.1
    }
    
    // 设置弹窗的detents数组,可同时添加多个detent(比如自定义比例+medium)
    sheet.detents = [customFractionDetent]
}

关键说明

  • 自定义标识符:.custom需要传入唯一的identifier,用于系统识别这个自定义detent,避免和其他detent冲突
  • 比例计算逻辑:闭包中的context.maximumDetentValue是当前屏幕下弹窗能达到的最大高度(也就是large detent的高度),乘以你需要的比例值,就能实现和SwiftUI.fraction(0.1)完全一致的效果
  • 多detent支持:如果需要同时提供多个弹窗高度选项,直接把多个detent对象加入detents数组即可,比如[customFractionDetent, .medium()]

版本要求

该API仅支持iOS 16及以上版本,如果需要兼容更低版本,需要手动实现弹窗高度的控制逻辑,但iOS 16+推荐使用官方提供的自定义detent方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 16:02:40