やりたいこと
結論
UISearchBarBackgroundを削除 or 透明化した上で、UISearchBarの色を変える。
// UISearchBarBackgroundを取得
if let searchBarBackground = searchBar.value(forKey: "_background") as? UIImageView {
// UISearchBarBackgroundを削除
searchBarBackground.removeFromSuperview()
}
searchBar.backgroundColor = UIColor.red
// 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の色を変えるという方法に落ち着きました。
(もっとスマートなやり方があれば、ぜひ教えてください🙂)