2017-02-19 13 views
2

所以我有两个UIViews,一个UILabelUITextField,第一个是字段的标题,第二个是信息将键入..这是我如何“M设置其自动版式限制条件:UILabel的宽度超过了文本使用编程自动布局

对于输入字段:

//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与超级视图右对齐(self)。电子邮件是左对齐的。然后他们之间有一个美学差距。

这就是问题所在:

如果我设置emailLabel22第一,那么它的宽度变得庞大和输入字段被压扁在屏幕的右侧,与他们之间有很多空的空间。 Like so.

如果我先设置输入字段,如上面的代码所示,然后将邮件压扁到其锁定宽度,在本例中为73.这意味着任何不符合73pt宽度的文本被省略号截断。 Like So

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

这不会是一个真正的问题,但我试图建立一个强大的标签/文本字段组合,我可以设置任何文本并完美匹配,因此我不想“锁定电子邮件标签的宽度”。我希望它尽可能多地扩展到正确的位置,但在文本大小范围内。我也不希望inputField挤压电子邮件标签。我也不想压缩电子邮件的字体大小,输入压缩很好。

我一直在试图解决这个问题3个小时。我不知道如何。

谢谢。

+1

这深夜我在哪里,所以我没有时间去帮助,但苹果确实有一些很好的文档关于“内在大小”,看起来可能会有所帮助:https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/ViewswithIntrinsicContentSize.html – dfd

回答

2

尝试集拥抱和commpresion性优先于你的UILabel,同时也是UITextField

enter image description here

+0

我从来不知道如何使用这些!现在我明白了!!非常感谢( – QuantumHoneybees

+0

我也永远不会记住,所以我总是在电脑上有这个图像 –

+0

你介意分享你从哪里得到这个图像吗?我喜欢它! – QuantumHoneybees

相关问题