【Swift4】UISearchBarの虫眼鏡アイコンのサイズ変更方法メモ。

…φ(^ω^*)

どうも。Reoです。

UISearchBarの虫眼鏡アイコン画像を変更する際にサイズ変更だけがうまくいかなかったのでメモメモ。

 

UISearchBarのアイコンを変更

アイコン変更は、

//適当なsearchBarがあったとする。
let searchBar = UISearchBar(frame: CGRect(x:0,y:0,width:self.view.frame.width,height:50))

//検索アイコン
let searchImg = UIImage(named:"search.png")
searchBar.setImage(searchImg, for: .search, state: .normal)

searchBar.setImage()でforに.searchを選択してあげれば簡単に変更できます。

 

同様にclearボタンは

//バツボタン
let clearImg = UIImage(named:"clear.png")
self.setImage(clearImg, for: .clear, state: .normal)

forの部分を.clearにしてあげればおkです。

 

んで。

.clearの方は画像サイズそのまんま表示されるので、50*50のアイコンだとこんな感じになります。

こっちは画像サイズを調整してあげればおkです。

虫眼鏡の方は同様に50*50のアイコンにしても、サイズは変わりません。

 

調べてみると虫眼鏡の方は12*12で表示されてるみたい。(上記画像はサイズ調整済みで20*20)

少し小さいので、大きくしたい!ということで調整してみました。

 

虫眼鏡アイコンのサイズを調整する

どうやらこれはtextFieldのleftViewに配置されているらしいのでそれをまず取得。

//subviewをたどってtextFieldをさがす
for subview in searchBar.subviews {
    for secondSubview in subview.subviews {
        //この階層にtextFieldがあるはず
        if secondSubview.isKind(of: UITextField.self) {
            if let textField = secondSubview as? UITextField{
                //textFieldのカスタマイズはここでする
            }
        }
    }
}

textFieldの背景色だったり文字色だったりはこの中ですればおkです。

んでこの中でtextFieldのleftViewを取得します。

if let glassIconView = textField.leftView as? UIImageView {
    //調整したい大きさに変更する
    glassIconView.frame.size = CGSize(width:20,height:20)
}

これをサイズ調整すればおkです。

 

全体はこんな感じ。

//subviewをたどってtextFieldをさがす
for subview in searchBar.subviews {
    for secondSubview in subview.subviews {
        //この階層にtextFieldがあるはず
        if secondSubview.isKind(of: UITextField.self) {
            if let textField = secondSubview as? UITextField{
                //textFieldのカスタマイズはここでする
                if let glassIconView = textField.leftView as? UIImageView {
                    //調整したい大きさに変更する
                    glassIconView.frame.size = CGSize(width:20,height:20)
                }
            }
        }
    }
}

 

ほいではでは。

 

Swift ,
コメントは認証制です。詳しくは下記の注意をお読みください。お気軽にコメントお願いします!

Write a Comment

コメント時の注意

「Twitter」「Facebook」「Google+」「WordPress」のいずれかのアカウントをお持ちの方は各アカウントと連携することでコメントできます。 コメントしたことはSNSに流れませんので、アカウントをお持ちの方はこちらの方法でコメントを投稿して下さると嬉しいです。 アカウントをお持ちでない方はメールアドレスで投稿することができます。 初回コメント時は承認後に表示されます。

Related Memo...

UITableView.RowAnimation の .none はアニメーションするよ

UITableView.RowAnimation の .none はアニメーションがnoneなわけじゃなく、デフォルトの設定を使うよという意味らしい。

The inserted or deleted rows use the default animations.

なのでアニメーションしちゃう。今更の気づき。

 

iOS

UINavigationController + UIScrollView の組み合わせで使っている時に謎の余白ができる時

UINavigationController + UIScrollView の組み合わせで使っていて、UIScrollView 上に AutoLayout で上下左右0で View を設置しているのに、30px程度上にずれてしまうとき。

`navigationController.navigationBar.isTranslucent = false` にすると直るかもしれない。

ScrollView上のコンテンツとNavigationBarの重なっているところが透過していたら多分これで直せるはず。

通常のターゲットではちゃんと動いているのに、iOSSnapshotTestCase を用いたテストでだけこの対応が必要なのよくわからないけれど。。。

iOS

記事を書くほどでもないけれどメモっておきたいこと

テスト投稿。

例えばiphone7 の画面サイズ

750 × 1334
半分375 × 667

iOS
more