2017-02-27 71 views
0

我有一個自定義UISearchController具有自定義UISearchBar作爲導航控制器的題目,所以,有一個持續的搜索欄控制整個子視圖控制器的變化可見久違冠軍時,短暫顯示灰色背景,的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 
     } 
    } 
} 

至於我能理解,在任何時候,是我的自定義搜索控制器deinitial並且它只被初始化一次,所以我覺得由於繪製循環而出現問題,在我的設置生效之前,它將暫時放置一個灰色背景的可見視圖。

我幾乎不知道這裏發生了什麼,以及如何解決這個問題。我想知道如果我只是忽略簡單的東西,或者如果我不得不創建自定義轉換對象來解決問題。我關於iOS架構和Swift的中級水平,但我總是希望瞭解更多。

+0

將tint color設置爲.clear而不是背景色 –

+0

將'controller.searchBar.tintColor'設置爲'UIColor.clear'或任何其他顏色都沒有區別,儘管看起來我能通過設置'controller .searchBar.barTintColor'爲與我的主導航相同的綠色(設置'barTintColor'爲'UIColor.clear'),在segue過渡動畫中產生黑色背景。 –

回答

1

我發現這個問題是由於沒有將值設置爲UISearchBar的可選barTintColor屬性而導致的。如果在過渡動畫過程中屬性爲nil,則視圖將顯示爲淺灰色,直到動畫結束。爲了解決這個問題,我設置了controller.searchBar.barTintColor = UIColor(red: 76/255, green: 203/255, blue: 124/255, alpha: 1),現在我得到了預期的結果。