【问题标题】:UISearchBar briefly displays gray background when returning to title from a show segue从 show segue 返回标题时,UISearchBar 会短暂显示灰色背景
【发布时间】:2017-02-27 04:19:33
【问题描述】:

我有一个自定义的UISearchController 和一个自定义的UISearchBar 作为导航控制器的标题,因此在子视图控制器的更改中可以看到一个持久的搜索栏控件,这显示在我的第一张图片中图库(还没有足够的声誉来发布图片):

http://imgur.com/a/IikEw

但是,当用户点击子表视图控制器中显示的搜索结果时,导航标题将替换为文本字符串,因此它看起来像我画廊中的第二张图片。

当我导航回显示搜索结果的表格视图时会出现问题,因为在短时间内,搜索栏的背景是浅灰色的,看起来就像我画廊中的第三张图片。

当我在模拟器中放慢动画速度时,我可以在 Xcode 中进入 Debug View Hierarchy 以查看有问题的元素是什么,结果证明这是一个名为“UISearchBarBackground”的 UIImageView,它只存在直到过渡动画结束,颜色恢复到预期的结果,如我画廊中的第四张图片所示。

在初始化和设置UISearchController属性的初始视图控制器中,我在viewDidLoad中设置了搜索栏的以下属性:

let controller = CustomSearchController(searchResultsController: self.searchResultsController)
controller.searchBar.backgroundColor = UIColor.clear
controller.searchBar.backgroundImage = nil

...我有这些自定义类,我实现了这些类,这样我就可以摆脱搜索控制器的取消按钮,它不会被委托语句删除:

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
        }
    }
}

据我所知,我的自定义搜索控制器在任何时候都没有被取消初始化,它只被初始化一次,所以我觉得问题出现了,因为绘图周期,它暂时放置了一个灰色的可见视图我的设置生效之前的背景。

对于这里到底发生了什么以及如何解决这个问题,我几乎一头雾水。我想知道我是否只是忽略了一些简单的事情,或者我是否必须创建一个自定义转换对象来解决问题。我对 iOS 架构和 Swift 的掌握程度约为中级水平,但我一直希望了解更多信息。

【问题讨论】:

  • 将色调颜色设置为 .clear 而不是背景颜色
  • controller.searchBar.tintColor 设置为UIColor.clear 或任何其他颜色都没有区别,尽管我似乎可以通过将controller.searchBar.barTintColor 设置为与我的主导航相同的绿色来解决我的问题(设置barTintColorUIColor.clear 在 segue 过渡动画期间导致黑色背景。

标签: ios swift segue uisearchbar uisearchcontroller


【解决方案1】:

我发现这个问题是由于没有为UISearchBar 的可选barTintColor 属性设置值引起的。如果在过渡动画期间属性为nil,则视图将显示为浅灰色,直到动画结束。为了解决这个问题,我设置了controller.searchBar.barTintColor = UIColor(red: 76/255, green: 203/255, blue: 124/255, alpha: 1),现在我得到了预期的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 2013-09-17
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多