在 TextField 图标前填充

Padding before TextField Icon

我找到了在 textfield 以编程方式启动之前应用图标的方法,但主要问题是在图标之前应用填充。

因为它刚好碰到文本框的边框。

我编程如下:

override func viewWillAppear(animated: Bool) {

    // Email Icon on left of email Text Field
    let imageView1 = UIImageView()
    let image1 = UIImage(named: "Message.png")
    imageView1.image = image1
    imageView1.frame = CGRectMake(100, 0, 10, 10)
    emailTextField.leftView = imageView1
    emailTextField.leftViewMode = UITextFieldViewMode.Always

    // Password Icon on left of pass Text Field
    let imageView2 = UIImageView()
    let image2 = UIImage(named: "Lock.png")
    imageView2.image = image2
    imageView2.frame = CGRectMake(100, 0, 10, 10)
    passwordTextField.leftView = imageView2
    passwordTextField.leftViewMode = UITextFieldViewMode.Always

}

但是边框和图标之间的一路space非常少

有没有办法在它们之间做一个填充?

有什么办法请告诉我

您可以取一个宽度为 20 的 UIView,并且可以将 leftVeiw 添加到此视图。现在将此视图设置为 leftView.

您可以通过继承UITextField

轻松调整space
class field: UITextField {

override func leftViewRectForBounds(bounds: CGRect) -> CGRect {
    var rect = bounds
    rect.origin.x -= 10
    return rect
}

override func textRectForBounds(bounds: CGRect) -> CGRect {
    var rect = bounds
    rect.origin.x -= 10
    return rect
}

}

您只需在一行中完成此操作

textfield.layer.sublayerTransform = CATransform3DMakeTranslation(10.0f, 0.0f, 0.0f);
  1. 尝试创建一个 UIView(例如 contentView)和一个 UIImageView(例如 leftImage
  2. 设置 leftImage 框架,因为它与 contenViewx 对齐 10 点(即)如果 contentView 的框架是 (0, 0, 25, 20) 然后设置 leftImage 的框架为(10, 0, 15, 20)

  3. 然后将leftImage作为子视图添加到contentView

  4. 现在很简单,添加 contentView 作为 textfield 的 leftView。

    let leftImage = UIImageView()
    
    let image1 = UIImage(named: "Key")
    leftImage.image = image1
    
    let contentView = UIView()
    contentView.addSubview(leftImage)
    
    contentView.frame = CGRectMake(0, 0, 25, 20)
    leftImage.frame = CGRectMake(10, 0, 25, 20)
    
    passwordTextField.leftView = contentView
    passwordTextField.leftViewMode = UITextFieldViewMode.Always
    

    Previops 输出:

    最终输出: