Swift:以编程方式在相对于视图底部的位置添加一个字段



我想在没有Interface Builder的情况下以编程方式做到这一点。我想给我的iOS应用添加一个UITextField距离应用视图底部恒定的距离。我看了很多现存的问题和答案。在Swift中没有,这个主题似乎相对没有文档。

有几个相关的答案,但这里是让它工作的所有部分:

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)

最新更新