我有一个自定义的UISearchController
,其中自定义的UISearchBar
作为导航 Controller 的标题,这样在 subview Controller 的整个更改过程中就有一个持久的搜索栏控件可见,这显示在我的画廊的第一张图片中(还没有足够的声誉来发布图片):
但是,当用户点击子 TableView Controller 中显示的搜索结果时,导航标题将替换为文本字符串,因此它看起来像我图库中的第二张图像。
当我导航回显示搜索结果的表格 View 时,就会出现问题,因为在很短的时间内,搜索栏具有浅灰色背景,看起来像我图库中的第三张图像。
当我在模拟器中放慢动画速度时,我可以进入 Xcode 中的调试 View 层次结构来查看有问题的元素是什么,结果是一个名为“UISearchBarBackground”的 UIImageView,仅存在于过渡动画结束,颜色恢复到预期结果,如我的画廊中的第四张图片所示。
在初始化并设置 UISearchController
属性的初始 View Controller 中,我在 viewDidLoad
中设置了搜索栏的以下属性:
let controller = CustomSearchController(searchResultsController: self.searchResultsController)
controller.searchBar.backgroundColor = UIColor.clear
controller.searchBar.backgroundImage = nil
...我有这些自定义类,我实现了这些自定义类,以便我可以摆脱搜索 Controller 的取消按钮,该按钮不会通过委托(delegate)语句被删除:
class CustomSearchBar: UISearchBar {
override func setShowsCancelButton(_ showsCancelButton: Bool, animated: Bool) {
super.setShowsCancelButton(false, animated: false)
}
}
class CustomSearchController: UISearchController {
lazy var _searchBar: CustomSearchBar = {
[unowned self] in
let customSearchBar = CustomSearchBar(frame: CGRect.zero)
return customSearchBar
}()
override var searchBar: UISearchBar {
get {
return _searchBar
}
}
}
据我所知,我的自定义搜索 Controller 在任何时候都不会被取消初始化,而且它只初始化一次,所以我觉得问题的出现是因为绘图周期,它暂时放置了一个带有灰色的可见 View 我的设置生效之前的背景。
我对这里到底发生了什么以及如何解决这个问题感到非常困惑。我想知道我是否只是忽略了一些简单的事情,或者我是否必须创建一个自定义转换对象来解决问题。我的 iOS 架构和 Swift 处于中级水平,但我一直希望了解更多信息。
最佳答案
我发现此问题是由于没有为 UISearchBar
的可选 barTintColor
属性设置值而引起的。如果在过渡动画期间该属性为nil
,则 View 将显示为浅灰色,直到动画结束。为了解决这个问题,我设置了 controller.searchBar.barTintColor = UIColor(red: 76/255, green: 203/255, blue: 124/255, alpha: 1)
,现在我得到预期的结果。
关于ios - 从节目转场返回标题时,UISearchBar 会短暂显示灰色背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42477779/