LoginSignup
7
3

More than 5 years have passed since last update.

Swift4 IB上で色やTextFieldの高さのカスタマイズができるUISearchBarの実装

Last updated at Posted at 2018-05-31

はじめに

こんにちは:leaves:
UISearchBarTextFieldの高さを変更したくなりました。

sample.png

UITextFieldsの色などについては以下の記事があります。分かりやすくて参考になります。
ありがとうございます。

しかし、UISearchBarの中のUITextFieldの高さは上の記事のようにsubViewsframeプロパティでの変更はできなくて少し悩んだので書いてみたいと思います。
至らぬ点など多々あると思いますが、コメントなど頂けたら幸いです。

実装について

UISearchBarのUITextfieldの高さは、Imageの高さと同じになるようで、
setSearchFieldBackgroundImage(_:for:)メソッドが使えるようでした。

ソースコード

カスタムクラスとして実装してみました。クラス名などご自由に変更してください。

CustomSearchBar.swift
import UIKit

@IBDesignable class CustomSearchBar: UISearchBar {

    var textField: UITextField {
        return self.value(forKey: "_searchField") as! UITextField
    }

    @IBInspectable var textFieldColor: UIColor = .lightGray {
        didSet { textFieldUpdate() }
    }

    @IBInspectable var textFieldHeight: CGFloat = 38 {
        didSet { textFieldUpdate() }
    }

    @IBInspectable var textFieldCornerDadius: CGFloat = 18 {
        didSet { textFieldUpdate() }
    }

    fileprivate func textFieldUpdate() {
        let image = UIImage.instantiate(size: CGSize(width: UIScreen.main.bounds.size.width, height: textFieldHeight), fillColor: textFieldColor, cornerRadius: textFieldCornerDadius)
        self.setSearchFieldBackgroundImage(image, for: .normal)
    }
}

extension UIImage {
    static func instantiate(size: CGSize, fillColor: UIColor, cornerRadius: CGFloat) -> UIImage? {
        let rect = CGRect(origin: CGPoint.zero, size: size)
        let path = UIBezierPath(roundedRect: rect, cornerRadius: cornerRadius)
        UIGraphicsBeginImageContextWithOptions(size, false, 0)
        fillColor.setFill()
        path.fill()
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image
    }
}

使い方

StoryBoardで変更することができます。

screen.png

※CornerRadiusはTextFieldHeightの半分の値を指定すると、丸フチになるなど独自で設定するといいかと思います。

参考にさせていただいた記事

7
3
1

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
3