UITextField以编程方式使用边距自动布局

时间:2016-05-29 03:56:43

标签: ios swift autolayout uitextfield cgrect

我是AutoLayout的新手,想要以100%的宽度显示我的UITextField,左右边距一致15px,如下所示:

enter image description here

通常情况下,我会使用CGRect执行此操作,将宽度设置为包含视图的宽度减去30px,然后将左侧偏移15px:

searchTextField.frame = CGRectMake(15, 0, view.frame.width - 30, 50)

但是我想学习AutoLayout这类事情,因为这是现在的方式。我应该注意到,我正在以编程方式执行所有操作 - 此处没有故事板。

如果有人可以帮助我,我会喜欢它!

更新

哇!谢谢你的回复。我相信他们所有人都会实现我想要的目标,但只能有一个:)

5 个答案:

答案 0 :(得分:2)

假设文本字段的父级为view,请在view.addSubview(searchTextField)之后执行此操作:

NSLayoutConstraint.activateConstraints([
    searchTextField.leadingAnchor.constraintEqualToAnchor(view.leadingAnchor, constant: 15),
    searchTextField.trailingAnchor.constraintEqualToAnchor(view.trailingAnchor, constant: -15),
    ])

答案 1 :(得分:2)

通常我会使用这个处理约束的cocoapod,但是如果你需要纯苹果解决方案文档说明:

  

在编程创建方面,您有三种选择   约束:你可以使用布局锚点,你可以使用   NSLayoutConstraint类,或者您可以使用Visual Format Language。

在您的情况下使用NSLayoutConstraints的方法是:

NSLayoutConstraint(item: textField, attribute: .Leading, relatedBy: .Equal, toItem: parentView, attribute: .LeadingMargin, multiplier: 1.0, constant: 15.0).active = true

NSLayoutConstraint(item: textField, attribute: .Trailing, relatedBy: .Equal, toItem: parentView, attribute: .TrailingMargin, multiplier: 1.0, constant: -15.0).active = true

NSLayoutConstraint(item: textField, attribute: .Top, relatedBy: .Equal, toItem: parentView, attribute: .TopMargin, multiplier: 1.0, constant: 50.0).active = true

请记住,如果您在视图中没有任何约束,它们将自动添加,您将不得不处理它们以及通过在运行时添加新约束而产生的冲突。为了避免这种情况,您可以手动创建textField并将其添加到视图中,或者在Interface Builder中设置具有低优先级的约束。

答案 2 :(得分:1)

使用此代码:

let topConstraint = NSLayoutConstraint(item: textField, attribute: NSLayoutAttribute.Top, relatedBy: .Equal, toItem: self.view, attribute: NSLayoutAttribute.Top, multiplier: 1.0, constant: 0)

let trailingConstraint  = NSLayoutConstraint(item: textField, attribute: NSLayoutAttribute.Trailing, relatedBy: .Equal, toItem: self.view, attribute: NSLayoutAttribute.Trailing, multiplier: 1.0, constant: 15)

let leadingConstraint = NSLayoutConstraint(item: textField, attribute: NSLayoutAttribute.Leading, relatedBy: .Equal, toItem: self.view, attribute: NSLayoutAttribute.Leading, multiplier: 1.0, constant: 15)

let heightConstraint = NSLayoutConstraint(item: textField, attribute: NSLayoutAttribute.Height, relatedBy: .Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1.0, constant: 50)

self.view.addConstraint(topConstraint )
self.view.addConstraint(trailingConstraint)
self.view.addConstraint(leadingConstraint)
self.view.addConstraint(heightConstraint)

答案 3 :(得分:0)

在故事板中设置约束。

单击文本字段,然后单击左下角的the pin button。从那里你可以选择那样的约束。

答案 4 :(得分:0)

要使用自动布局,您需要为文本字段定义约束。在这里,我创建了与其超级视图相关的四个约束(前导,尾随,顶部和高度)。

func addLabelConstraints(superView:UIView) {

    let leading = NSLayoutConstraint(item: searchTextField, attribute: .Leading, relatedBy: .Equal, toItem: superView, attribute: .Leading, multiplier: 1, constant: 15)
    superview!.addConstraint(leading)

    let trailing = NSLayoutConstraint(item: searchTextField, attribute: .Trailing, relatedBy: .Equal, toItem: superView, attribute: .Trailing, multiplier: 1, constant: 15)
    superView.addConstraint(trailing)

    let top = NSLayoutConstraint(item: searchTextField, attribute: .Top, relatedBy: .Equal, toItem: superView, attribute: .Top, multiplier: 1, constant: 0)
    superView.addConstraint(top)

    let height = NSLayoutConstraint(item: searchTextField, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .Height, multiplier: 0, constant: 50)
    superView.addConstraint(height)
 }