LoginSignup
7
7

More than 5 years have passed since last update.

【iOS - Swift】UISearchBarの背景部分を透過させる方法

Last updated at Posted at 2016-01-11

UISearchBarの背景部分を透過させるコード

UISearchBarのサブビューまで潜ってUISearchBarBackground(UIImageViewのサブクラス)とUISearchBarTextField(UITextFieldのサブクラス)を直接いじってやるやり方。

for subview in searchBar.subviews {
    for secondSubView in subview.subviews {
        // 背景部分
        if let imgview = secondSubView as? UIImageView {
            imgview.image = nil
        }
        // テキストフィールド部分
        if let txtview = secondSubView as? UITextField {
            txtview.backgroundColor = UIColor.whiteColor()
        }
    }
}

どのタイミングでこのコードを走らせるか

まず、アプリ起動時からUISearchBarの背景部分を透過したい場合に、viewDidLoad()viewWillAppear()内に記述するというのは__避けるべき__だと思う。

これはUISearchBarに対してAutoLayoutを使用している場合に、viewDidLoad()およびviewWillAppear()の時点ではレイアウト制約が反映されていないため、その影響か、UISearchBarのサブビューであるUISearchBarBackgroundとUISearchBarTextFieldに対して再設定を行っても、ちゃんと効いてくれない。

制約が実際に反映されるのは、viewDidLayoutSubviews()の時点なので、例えばこのタイミングで透過処理を行えばよい。

override fun viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    // 透過処理(先のコードと一緒)    
    for subview in searchBar.subviews {
        for secondSubView in subview.subviews {
            if let imgview = secondSubView as? UIImageView {
                imgview.image = nil
            }
            if let txtview = secondSubView as? UITextField {
                txtview.backgroundColor = UIColor.whiteColor()
            }
        }
    }
}
7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7