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

如何修改Context Menu预览视图的圆角半径?

解决Context Menu预览视图背景圆角问题

你遇到的问题是系统默认的Context Menu预览模糊背景圆角和自定义预览VC的圆角不匹配,解决方法是通过UIPreviewPresentationControllerDelegate修改背景视图的圆角:

  1. 让预览视图控制器遵守UIPreviewPresentationControllerDelegate协议
  2. 在预览VC的viewDidLoad中设置代理,并给自身视图设置圆角
  3. 实现代理方法,找到模糊背景视图并同步圆角值

代码示例

class CustomPreviewVC: UIViewController, UIPreviewPresentationControllerDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 设置自身视图圆角,和背景保持一致
        view.layer.cornerRadius = 20
        view.clipsToBounds = true
        
        // 绑定预览控制器代理
        previewPresentationController?.delegate = self
    }
    
    func previewPresentationController(_ presentationController: UIPreviewPresentationController, prepareForPresentationOf previewViewController: UIViewController) {
        // 遍历容器视图,找到系统模糊背景视图
        for subview in presentationController.containerView.subviews {
            if let effectView = subview as? UIVisualEffectView {
                effectView.layer.cornerRadius = 20
                effectView.clipsToBounds = true
                break
            }
        }
    }
}

在表格中使用预览VC

override func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? {
    return UIContextMenuConfiguration(identifier: nil, previewProvider: {
        let previewVC = CustomPreviewVC()
        // 根据需求配置预览VC内容(比如传递数据)
        return previewVC
    }) { _ in
        // 配置菜单动作
        let action = UIAction(title: "操作") { _ in
            // 动作逻辑
        }
        return UIMenu(title: "", children: [action])
    }
}

说明:如果模糊背景不在直接子视图中,可改成递归遍历查找UIVisualEffectView;该方案兼容iOS 13及以上版本,能保证预览视图和背景圆角完全匹配,不会出现边角问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:55:20