miyazaki-dev

【Swift】UITextFieldにpaddingをつける方法

Swift

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

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

UITextFieldにpaddingをつける方法

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

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

SwiftのUITextFieldにpaddingをつける

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

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

UITextFieldのクラスを作成

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)
  }
}

以上!