我有一個自定義UISearchController
具有自定義UISearchBar
作爲導航控制器的題目,所以,有一個持續的搜索欄控制整個子視圖控制器的變化可見久違冠軍時,短暫顯示灰色背景,的UISearchBar從節目賽格瑞
然而,當用戶點擊一個子表視圖控制器顯示的搜索結果,導航標題是:這是我的畫廊的第一張圖像(沒有足夠的信譽尚未發表圖片)所示換成一個文本字符串,以便它看起來像我的畫廊中的第二個圖像。
當我導航回顯示搜索結果的表格視圖時,會出現問題,因爲在短時間內,搜索欄的淺灰色背景看起來像我的畫廊中的第三張圖像。
當我減慢模擬器中的動畫時,我可以進入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
}
}
}
至於我能理解,在任何時候,是我的自定義搜索控制器deinitial並且它只被初始化一次,所以我覺得由於繪製循環而出現問題,在我的設置生效之前,它將暫時放置一個灰色背景的可見視圖。
我幾乎不知道這裏發生了什麼,以及如何解決這個問題。我想知道如果我只是忽略簡單的東西,或者如果我不得不創建自定義轉換對象來解決問題。我關於iOS架構和Swift的中級水平,但我總是希望瞭解更多。
將tint color設置爲.clear而不是背景色 –
將'controller.searchBar.tintColor'設置爲'UIColor.clear'或任何其他顏色都沒有區別,儘管看起來我能通過設置'controller .searchBar.barTintColor'爲與我的主導航相同的綠色(設置'barTintColor'爲'UIColor.clear'),在segue過渡動畫中產生黑色背景。 –