如何修改Context Menu预览视图的圆角半径?
你遇到的问题是系统默认的Context Menu预览模糊背景圆角和自定义预览VC的圆角不匹配,解决方法是通过UIPreviewPresentationControllerDelegate修改背景视图的圆角:
- 让预览视图控制器遵守
UIPreviewPresentationControllerDelegate协议 - 在预览VC的
viewDidLoad中设置代理,并给自身视图设置圆角 - 实现代理方法,找到模糊背景视图并同步圆角值
代码示例
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
相关产品推荐
相关产品推荐

