我想在没有Interface Builder的情况下以编程方式执行此操作。我想在我的iOS应用程序中添加一个UITextField,与应用程序视图的底部保持一定距离。我已经查看了很多现有的问题和答案。没有人在Swift中,这个主题似乎相对没有文档。
答案 0 :(得分:3)
有几个有些相关的答案,但以下是完成这项工作所需的所有部分:
1)我需要创建一个像
这样的约束let bottomConstraint : NSLayoutConstraint = NSLayoutConstraint.constraintsWithVisualFormat("V:[inputBox]-50-|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["inputBox": inputBox])[0] as! NSLayoutConstraint
这使用Swift的域特定语言“可视格式语言”(VFL):V:[inputBox]-50-|
,其中'V'表示垂直,50是像素数和'|'是指父视图的底部。
2)在向视图添加约束之前必须将UITextField添加到视图中,因此'|'上面可以找到父视图。
3)一旦我使用了一个NSLayoutConstraint,我就不得不将它们用于这个元素的大小和定位的所有方面。因此,我必须添加这两行来描述它的宽度和高度:
let heightConstraint : NSLayoutConstraint = NSLayoutConstraint.constraintsWithVisualFormat("V:[inputBox(==70)]", options: NSLayoutFormatOptions(0), metrics: nil, views: ["inputBox": inputBox])[0] as! NSLayoutConstraint
let widthConstraint : NSLayoutConstraint = NSLayoutConstraint.constraintsWithVisualFormat("H:[inputBox(==superview)]", options: NSLayoutFormatOptions(0), metrics: nil, views: ["inputBox": inputBox, "superview":self.view])[0] as! NSLayoutConstraint
4)为了让我的UITextField与VFL正确交互,我必须添加这一行:
inputBox.setTranslatesAutoresizingMaskIntoConstraints(false)
全部放在一起:
let inputBox = UITextField(frame: rect)
inputBox.backgroundColor = UIColor.yellowColor()
inputBox.setTranslatesAutoresizingMaskIntoConstraints(false)
self.view.addSubview(inputBox)
let bottomConstraint : NSLayoutConstraint = NSLayoutConstraint.constraintsWithVisualFormat("V:[inputBox]-50-|", options: NSLayoutFormatOptions(0), metrics: nil, views: ["inputBox": inputBox])[0] as! NSLayoutConstraint
let heightConstraint : NSLayoutConstraint = NSLayoutConstraint.constraintsWithVisualFormat("V:[inputBox(==70)]", options: NSLayoutFormatOptions(0), metrics: nil, views: ["inputBox": inputBox])[0] as! NSLayoutConstraint
let widthConstraint : NSLayoutConstraint = NSLayoutConstraint.constraintsWithVisualFormat("H:[inputBox(==superview)]", options: NSLayoutFormatOptions(0), metrics: nil, views: ["inputBox": inputBox, "superview":self.view])[0] as! NSLayoutConstraint
view.addConstraint(bottomConstraint)
view.addConstraint(heightConstraint)
view.addConstraint(widthConstraint)