使用编程的自动布局

时间:2017-02-19 04:43:32

标签: ios swift uiview autolayout uilabel

所以我有两个UIViews,一个UILabel和一个UITextField,第一个是字段的标题,第二个是输入信息的地方..这就是我设置的方式他们的AutoLayout约束:

输入字段:

 //Constraints:
    inputField.translatesAutoresizingMaskIntoConstraints = false;
    //Setting trailing = superview(which is called self)'s trailing +2.0
    NSLayoutConstraint(item: inputField, 
    attribute: .trailing, relatedBy: .equal, 
    toItem: self, attribute: .trailingMargin, 
    multiplier: 1.0, constant: 2.0).isActive = true;

    //Set Top = superview(which is called self) top -2.0
    NSLayoutConstraint(item: inputField, 
    attribute: .top, relatedBy: .equal, 
    toItem: self, attribute: .topMargin, 
    multiplier: 1.0, constant: -2.0).isActive = true;

    //Setting the height = 30
    NSLayoutConstraint(item: inputField, attribute: .height, 
    relatedBy: .equal, 
    toItem: nil, attribute: .notAnAttribute, 
    multiplier: 1.0, constant: 30).isActive = true;

然后为UILabel(称为emailLabel22):

//Constraints:
    //      Left
    NSLayoutConstraint(item: emailLabel22, 
    attribute: .leading, relatedBy: .equal, 
    toItem: self, attribute: .leadingMargin, 
    multiplier: 1.0, constant: 2.0).isActive = true;

    //      Buffer Right
    NSLayoutConstraint(item: emailLabel22, 
    attribute: .trailing, relatedBy: .equal, 
    toItem: inputField, attribute: .leading, 
    multiplier: 1.0, constant: -8.0).isActive = true;

    //      Align Tops
    NSLayoutConstraint(item: emailLabel22, 
    attribute: .top, relatedBy: .equal, 
    toItem: inputField, attribute: .top, 
    multiplier: 1.0, constant: 0).isActive = true;

    //      Height
    NSLayoutConstraint(item: emailLabel22, 
    attribute: .height, relatedBy: .equal, 
    toItem: nil, attribute: .notAnAttribute, 
    multiplier: 1.0, constant: 30).isActive = true;

    //      Buffer Right -- **For Input Field**
    NSLayoutConstraint(item: inputField, 
    attribute: .leading, relatedBy: .equal, 
    toItem: emailLabel22, attribute: .trailing, 
    multiplier: 1.0, constant: 8.0).isActive = true;

    //      Locking in Width??? (Should I use this?)
    NSLayoutConstraint(item: emailLabel22, 
    attribute: .width, relatedBy: .equal, 
    toItem: nil, attribute: .notAnAttribute, 
    multiplier: 1.0, constant: emailLabel22.frame.size.width);

上面代码的要点是:inputField与superview(self)右对齐。电子邮件左对齐。然后,他们之间存在着美学上的差距。

这就是问题:

如果我首先设置emailLabel22,那么它的宽度变得很大,输入字段被压缩到屏幕的右侧,它们之间有很多空的空间。 Like so.

如果我首先设置输入字段,如上面的代码,我然后将电子邮件压缩到其锁定的宽度,在这种情况下是73.这意味着任何不适合73pt宽度的文本被截断用省略号。 Like So

如果我删除电子邮件宽度上的锁定,如果我输入的文字不适合文本字段,则inputField的大小会扩大。 Like So

这不会是一个问题,但我正在尝试构建一个强大的标签/文本字段组合,我可以设置任何文本并使其完美适合,所以我不想要“锁定向下“电子邮件标签的宽度”。我希望它扩展到它想要的权利,但在文本大小内。我也不希望inputField压缩电子邮件标签。我也不想压缩电子邮件的字体大小,输入压缩就好了。

我一直试图解决这个问题3个小时。我不知道怎么做。

感谢。

1 个答案:

答案 0 :(得分:4)

尝试在UILabel和UITextField上设置拥抱和抗压优先级

enter image description here