【Swift/ストリーボード無し】UITextFieldにpaddingをつける方法

 

デフォルトのUITextFieldだとなんか左に引っ付いてて、

デザイン的によくない気がするってことでUITextFieldにpaddingをつけるサンプルコードを作成しました。

  • Swift version 4.2.1

UITextFieldにpaddingをつける方法

画像の上がデフォルトのUITextFieldで

下のUITextFieldがpaddingをつけたUITextFieldになります。下のほうがいい感じ。

使い回しやすいようにCustomTextFieldクラスを作成。

最低限のみの機能となります。その他もろもろ好きに追加してください。

 

import UIKit

class CustomTextField: UITextField {

    // とりあえずpaddingを設定
    var padding: CGPoint = CGPoint(x: 10.0, y: 10.0)
    
    init() {
        super.init(frame: .zero)
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
        
    override func textRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.insetBy(dx: self.padding.x, dy: self.padding.y)
    }
    
    override func editingRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.insetBy(dx: self.padding.x, dy: self.padding.y)
    }
    
    override func placeholderRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.insetBy(dx: self.padding.x, dy: self.padding.y)
    }
}

んでもってViewControllerで使ってあげる。

import UIKit

class ViewController: UIViewController {
    // 普通のUITextField
    let normalUITextField:UITextField = UITextField()
    // paddingありのUITextField
    let customUITextField:CustomTextField = CustomTextField()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.normalUITextField.frame = CGRect(x: 100, y: 200, width: 200, height: 60)
        self.normalUITextField.backgroundColor = UIColor.lightGray
        self.view.addSubview(self.normalUITextField)
        
        self.customUITextField.frame = CGRect(x: 100, y: 300, width: 200, height: 60)
        self.customUITextField.backgroundColor = UIColor.lightGray
        self.view.addSubview(self.customUITextField)
    }
}

以上!