-3

我想在没有 Interface Builder 的情况下以编程方式执行此操作。我想将 UITextField 添加到我的 iOS 应用程序中,与应用程序视图底部保持恒定距离。我查看了很多现有的问题和答案。Swift 中没有一个,而且这个主题似乎相对没有文档。

4

1 回答 1

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)
于 2015-08-02T21:32:05.477 回答