在 UISearchController 中按取消后导航栏被阻止

Posted

技术标签:

【中文标题】在 UISearchController 中按取消后导航栏被阻止【英文标题】:Navigation bar gets blocked after pressing Cancel in UISearchController 【发布时间】:2019-09-16 12:07:04 【问题描述】:

我正在为 ios 13 准备应用程序,但导航栏中的搜索控制器出现错误。如何解决导航栏故障?

let search = UISearchController(searchResultsController: nil)

search.dimsBackgroundDuringPresentation = false
search.searchResultsUpdater = self
search.hidesNavigationBarDuringPresentation = false
self.definesPresentationContext = true
search.searchBar.isTranslucent = false

self.navigationItem.searchController = search

self.navigationItem.hidesSearchBarWhenScrolling = true

按下取消,导航栏项目变得不可触摸。 推送视图控制器会导致导航栏项重叠。

我在 git https://github.com/eKroman/TESTsearchBar 上创建了测试项目

使用从 Xcode 11 从 beta 7(可能是较旧的 beta)到 Xcode 11 GM seed 2 的 iOS 13 beta(在 iPad 上测试)出现错误。 不会出现在模拟器上。

【问题讨论】:

当你点击取消按钮时你在做什么,你正在调用什么动作方法? 无操作,未处理取消事件 我也有同样的问题。它适用于 iOS 13.0(最终版本),但在 iOS13.1 Beta4 中中断 iOS 13.2 公测版似乎解决了这个问题 【参考方案1】:

我遇到了同样的问题,如果我取消 searchBar 并更改 navigationItem.title 那么我有一个双标题?。就像导航栏的幽灵层停留在导航控制器中一样。

这就是我修复它的方法:

searchController.hidesNavigationBarDuringPresentation = true

在 Apple 解决此问题之前最好使用它。

我还注意到后退按钮切换为默认颜色(蓝色),好像导航栏 TintColor 已重置。

配置: - Xcode 11.0 (11A420a) - iOS 13.1 (17A5844a)

【讨论】:

我有同样的问题(即 SearchController 取消按钮弄乱了 BackButton 默认颜色)。但是 `navigationItem.searchController?.hidesNavigationBarDuringPresentation = true` 没有帮助!【参考方案2】:

对于在@CoachThys 的回答中将后退按钮重置为默认颜色(蓝色),我设法通过下面的代码解决它。

if #available(iOS 13.0, *) 
    let appearance = UINavigationBarAppearance()
    /* .. set other things on appearances */
    appearance.buttonAppearance.normal.titleTextAttributes = [.foregroundColor: color]

    standardAppearance = appearance
    compactAppearance = appearance
    scrollEdgeAppearance = appearance

但是,我找不到解决仍然短暂重置为蓝色的背面指示器图像的方法。

【讨论】:

【参考方案3】:

添加带有图像的自定义后退按钮将修复新错误。对我来说效果很好。

        let negativeSpacer = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil)
        negativeSpacer.width = -8
        self.navigationItem.leftBarButtonItems = [negativeSpacer, leftBarButtonItem]

【讨论】:

以上是关于在 UISearchController 中按取消后导航栏被阻止的主要内容,如果未能解决你的问题,请参考以下文章

UISearchController禁用取消按钮[重复]

UISearchController 禁用取消 UIBarButtonItem

UISearchController 在点击取消按钮时关闭 VC

按下取消按钮时如何防止 UISearchController 关闭?

UISearchController 更改“取消”按钮标题

UISearchController 中的取消按钮在 iOS 13 中没有正确消失