iOS13では禁止になっているようです。
UISearchBarのプライベートなプロパティにアクセスするコードがiOS 13では禁止になったようです
#下準備
##ブラー無効化
extension UISearchBar {
func disableBlur() {
backgroundImage = UIImage()
translucent = true
}
}
##textField取得
extension UISearchBar {
var textField: UITextField? {
return valueForKey("_searchField") as? UITextField
}
}
##アクセサリ取得
extension UITextField {
//クリアボタン
var rightButton: UIButton? {
return valueForKey("_clearButton") as? UIButton
}
//虫眼鏡
var lupeImageView: UIImageView? {
return leftView as? UIImageView
}
}
##ViewのRenderingModeをalwaysTemplateに変更
extension UIButton {
func becomeImageAlwaysTemplate() {
if let image = imageForState(.Highlighted) {
let paintedImage = image.imageWithRenderingMode(.AlwaysTemplate)
setImage(paintedImage, forState: .Normal)
setImage(paintedImage, forState: .Highlighted)
}
}
}
extension UIImageView {
func becomeImageAlwaysTemplate() {
image = image?.imageWithRenderingMode(.AlwaysTemplate)
}
}
#カスタマイズ
角丸
searchBar.textField.layer.cornerRadius = searchBar.textField.bounds.height / 2.0
searchBar.textField.layer.masksToBounds = true
毎回masksToBoundsを設定する必要あり
##背景色透過
searchBar.disableBlur()
searchBar.backgroundColor = UIColor.clearColor()
##placeholderの文字色変更
searchBar.placeholder = placeholder
searchBar.textField?.attributedPlaceholder = NSAttributedString(string: searchBar.placeholder ?? "", attributes: [NSForegroundColorAttributeName: UIColor.whiteColor()])
##入力部分の背景色変更
searchBar.textField?.backgroundColor = UIColor.redColor()
##入力文字色変更
searchBar.textField?.textColor = UIColor.blackColor()
##クリアボタンの色変更
searchBar.textField?.rightButton?.becomeImageAlwaysTemplate()
searchBar.textField?.rightButton?.tintColor = UIColor.whiteColor()
##虫眼鏡アイコンの色変更
searchBar.textField?.lupeImageView?.becomeImageAlwaysTemplate()
searchBar.textField?.lupeImageView?.tintColor = UIColor.whiteColor()
##カーソル・選択範囲色の変更
searchBar.tintColor = UIColor.whiteColor()