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

如何自定义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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:50:40