ios - 从节目转场返回标题时,UISearchBar 会短暂显示灰色背景

标签 ios swift segue uisearchbar uisearchcontroller

我有一个自定义的UISearchController,其中自定义的UISearchBar作为导航 Controller 的标题,这样在 subview Controller 的整个更改过程中就有一个持久的搜索栏控件可见,这显示在我的画廊的第一张图片中(还没有足够的声誉来发布图片):

/image/AFPCq.jpg

但是,当用户点击子 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/

相关文章:

ios - 当搜索栏成为第一响应者时更改表 - swift

ios - 将数据从 TableViewController 传递到容器中嵌入的另一个 TableViewController

swift - NSWorkspace.shared.icon(文件:) does not return icon image

ios - 尝试从 UIView 的按钮转到另一个 ViewController 时,委托(delegate)不起作用

ios - UICollectionViewCell 自定义 Segue ViewController 连接错误

ios - 以缩放模式运行的 iOS 8 应用程序是否使用 @3x 图像?

ios - 从核心数据本质上调整大小(swift 3)

ios - 登录屏幕 - 下一步的按钮

iOS - 倒车视频文件 (.mov)

ios - 我可以提供 SDWebImageCache 的 URL 以从缓存或下载返回图像吗?