所以我有两个UIViews,一个UILabel
和UITextField
,第一个是字段的标题,第二个是信息将键入..这是我如何“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个小时。我不知道如何。
谢谢。
这深夜我在哪里,所以我没有时间去帮助,但苹果确实有一些很好的文档关于“内在大小”,看起来可能会有所帮助:https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/ViewswithIntrinsicContentSize.html – dfd