ios - UILabel 的宽度超过使用编程自动布局的文本

标签 ios swift uiview autolayout uilabel

所以我有两个 UIView,一个 UILabel 和一个 UITextField,第一个是字段的标题,第二个是输入信息的位置..这就是我设置自动布局约束的方式:

对于输入字段:

 //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 与 super View (self) 右对齐。电子邮件左对齐。那么他们之间在审美上就有了差距。

这就是问题:

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

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

如果我取消对电子邮件宽度的锁定,则当我输入不适合文本字段的单词时,输入字段的大小会扩大。 Like So

这并不是真正的问题,但我正在尝试构建一个强大的标签/文本字段组合,我可以将任何文本设置为并使其完美适合,所以我不想必须“锁定”沿着电子邮件标签的宽度”。我希望它能够向右扩展,但要在文本大小之内。我也不希望 inputField 压扁电子邮件标签。我也不想压缩电子邮件的字体大小,压缩输入就可以了。

我已经尝试解决这个问题 3 个小时了。我不知道该怎么做。

谢谢。

最佳答案

尝试在 UILabel 和 UITextField 上设置拥抱和压缩阻力优先级

enter image description here

关于ios - UILabel 的宽度超过使用编程自动布局的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42323723/

相关文章:

ios - NSEntityDescription 仅在 iPad Air 7.1 上返回 nil

objective-c - 具有通用 UIView 的子类 UILabel 和 UITextView

ios - Facebook iOS SDK 3.6 startWithGraphPath 完成 block 未执行

ios - iPhone 旋转应用于 3d 对象

ios - ARKit 支持 iPhone SE 吗?

ios - 调整旋转 UIView 的 subview 的大小

iphone - 向 UIView 添加组合框或下拉列表

ios - 根据点击的按钮在tableView中显示不同的数据

json - 为什么我不能使用 codable 解码这个 json 数据?

ios - Swift:UIAlertController 从列表中选择子集