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