在 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 禁用取消 UIBarButtonItem
UISearchController 在点击取消按钮时关闭 VC