如何在Swift中使用NSLayoutConstraint在UITextField中添加填充?

时间:2016-05-02 07:03:45

标签: ios swift uitextfield nslayoutconstraint

我有一个UIView的子类,其中我有UITextField并希望将占位符文本移动一点。我正在使用NSLayoutConstraint来设置子视图的位置和大小。我创建了UIView并将其添加为leftView的{​​{1}}但它崩溃说明“视图层次结构没有为约束做好准备”。以下是我的代码:

UITextField

}

7 个答案:

答案 0 :(得分:9)

解决此问题的正确方法:

@IBDesignable
class FormTextField: UITextField {

  @IBInspectable var paddingLeft: CGFloat = 0
  @IBInspectable var paddingRight: CGFloat = 0

  override func textRect(forBounds bounds: CGRect) -> CGRect {
    return CGRect(x: bounds.origin.x + paddingLeft, y: bounds.origin.y, width: bounds.size.width - paddingLeft - paddingRight, height: bounds.size.height)
  }

  override func editingRect(forBounds bounds: CGRect) -> CGRect {
    return textRect(forBounds: bounds)
  }
}

取自here

答案 1 :(得分:4)

制作UITextField自定义类并在该类中实现这两个方法,并将文本字段设为自定义文本字段。

{{1}}

答案 2 :(得分:0)

let paddingForFirst = UIView(frame: CGRectMake(0, 0, 5, self.Email_Txt.frame.size.height-5))
Email_Txt.leftView = paddingForFirst
Email_Txt.leftViewMode = UITextFieldViewMode .Always

答案 3 :(得分:0)

试试这段代码它会帮助你

override func viewDidLoad() {
super.viewDidLoad()
let paddingView = UIView(frame: CGRectMake(0, 0, 15, self.myTextField.frame.height))
myTextField.leftView = paddingView
myTextField.leftViewMode = UITextFieldViewMode.Always
}

答案 4 :(得分:0)

请在下面写一下: - SWIFT 2.1.1

let tempView = UIView(frame:CGRectMake(6, 0, 22, 26))
tempView.backgroundColor = UIColor.clearColor()
searchTextField.leftView?.frame = CGRectMake(0, 0, tempView.frame.size.width, tempView.frame.height)

searchTextField.leftViewMode = UITextFieldViewMode.Always
searchTextField.leftView = tempView

答案 5 :(得分:0)

yon不应该为该填充视图设置或给出约束。删除填充视图的所有约束。它是textfield的左视图,因此它会根据文本字段的约束自动调整。并设置填充视图的框架,您希望填充的空间。

希望这会有所帮助:)

答案 6 :(得分:0)

您正面临此错误"视图层次结构未针对约束",做好准备,因为paddingView被添加为左/右视图并且不需要任何约束

注意:不需要为作为左/右视图添加到UITextField的视图提供约束。因此,您只需设置paddingView的框架并将其分配给leftView即可。无需为paddingView提供约束。