如何自定义iOS15+QLPreviewController导航栏,仅保留右侧搜索按钮?
移除QLPreviewController导航栏右侧多余按钮(仅保留搜索)- iOS15+ & Xcode13.2+
针对iOS15及Xcode13.2以上版本,要移除QLPreviewController导航栏右侧除搜索外的所有按钮,可通过以下方案实现:
核心思路
QLPreviewController的导航栏按钮为异步加载,需在界面完全显示后,通过过滤导航栏右侧按钮集合,仅保留搜索按钮对应的项。
具体实现代码
import QuickLook class CustomQLPreviewController: QLPreviewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) // 延迟执行确保按钮已完成加载 DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { [weak self] in guard let navItem = self?.navigationItem else { return } navItem.rightBarButtonItems = navItem.rightBarButtonItems?.filter { $0.accessibilityIdentifier == "QLPreviewControllerSearchBarButtonItemIdentifier" } } } }
使用说明
- 直接使用上述自定义的
CustomQLPreviewController替代原生QLPreviewController - 若不想子类化,也可在展示预览控制器的宿主控制器中,监听预览控制器的
viewDidAppear事件,执行相同的过滤逻辑 - 延迟时间可根据实际情况微调,确保按钮已完成初始化
注意事项
- 该方案依赖苹果内部的按钮标识,若未来系统版本更新修改此标识,需同步调整
- 确保预览控制器已正确设置
dataSource和delegate,并加载了有效预览内容
内容的提问来源于stack exchange,提问作者Nikunj
相关产品推荐
相关产品推荐

