やりたいこと
結論
UISearchBarBackground
を削除 or 透明化した上で、UISearchBar
の色を変える。
やり方1
// UISearchBarBackgroundを取得
if let searchBarBackground = searchBar.value(forKey: "_background") as? UIImageView {
// UISearchBarBackgroundを削除
searchBarBackground.removeFromSuperview()
}
searchBar.backgroundColor = UIColor.red
やり方2
// UISearchBarBackgroundを取得
if let searchBarBackground = searchBar.value(forKey: "_background") as? UIImageView {
// UISearchBarBackgroundを透明化
searchBarBackground.alpha = 0
}
searchBar.backgroundColor = UIColor.red
※コード内のvalue(forKey:)
について、iOS13で禁止になったようです。
UISearchBarのプライベートなプロパティにアクセスするコードがiOS 13では禁止になったようです - Qiita
試したこと
まず試したのはこちら。
うまくいかなかった
searchBar.barTintColor = UIColor.red
このやり方だとたしかに色は変わりますが、なにやら黒い線が残ってしまいます。
View Hierarchyで見てみると、色が変わっているのはUISearchBarBackground
で、そこにはデフォルトで下線が引かれていることがわかりました。
ならばこれはどうでしょう。
うまくいかなかった
searchBar.backgroundColor = UIColor.red
今度はUISearchBar
自体の背景色が変わりましたが、UISearchBarBackground
が挟まっているためうまくいきません(背景グレーのSearchBarとして表示されてしまいます)。
最終的には、結論のようにUISearchBarBackground
を削除 or 透明化した上で、UISearchBar
の色を変えるという方法に落ち着きました。
(もっとスマートなやり方があれば、ぜひ教えてください🙂)