2017-02-27 10 views
0

UISearchControllerをカスタマイズしてナビゲーションコントローラーのタイトルとしてカスタムUISearchBarを持っていますので、子ビューコントローラーの変更、UISearchBarは、ショーセグからタイトルに戻るときに一時的に灰色の背景を表示します

ユーザーは、子テーブルビューコントローラに表示される検索結果をタップしかしhttp://imgur.com/a/IikEw

は、ナビゲーションのタイトルは次のとおりです。私のギャラリーの最初の画像(まだ画像を投稿するには十分ではありません評判)に示されていますそれは私のギャラリーの2番目のイメージのように、テキスト文字列に置き換えられます。私は、検索結果を示すテーブルビューに戻って移動したときに一瞬のために、検索バーは、私のギャラリーで第三の画像のように見えるライトグレーの背景を持っているので、

問題は、発生します。

シミュレータのアニメーションを遅くすると、Xcodeにデバッグビューの階層構造を入力して、問題の要素が何であるかを知ることができます。これは、「UISearchBarBackground」という名前のUIImageViewとなる私のギャラリーの4番目の画像に示すように、トランジションアニメーションが終了し、色が目的の結果にスナップします。私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

背景色ではなくクリア色に設定します –

+0

'controller.searchBar.tintColor'を' UIColor.clear'に設定するか他の色でも違いはありませんが、私は自分の問題を 'controller .searchBar.barTintColor'を私のメインナビゲーションと同じ緑色にします( 'barTintColor'を' UIColor.clear'に設定すると、セグのトランジションアニメーション中に黒い背景が表示されます)。 –

答えて

1

この問題は、オプションのbarTintColorプロパティの値をUISearchBarに設定しないと発生していることがわかりました。トランジションアニメーション中にプロパティがnilの場合、アニメーションが終了するまでライトグレーが表示されます。この問題を解決するために、私はcontroller.searchBar.barTintColor = UIColor(red: 76/255, green: 203/255, blue: 124/255, alpha: 1)を設定しました。そして今、私は意図した結果を得ています。

関連する問題