将UILabel作为子视图添加到UITextView时的模糊约束

时间:2016-09-20 19:05:35

标签: ios swift3

问题
我已经将UITextView子类化,并添加了UILabel作为子视图。我想把标签放在右下角。

代码

  fileprivate lazy var counterLabel: UILabel = {
    let label = UILabel()
    label.translatesAutoresizingMaskIntoConstraints = false

    self.addSubview(label)

    // add constraints
    self.addConstraints([
      NSLayoutConstraint(item: label, equalTo: self, attribute: .right),
      NSLayoutConstraint(item: label, equalTo: self, attribute: .bottom)]
    )

    return label
  }()

截图
enter image description here

如上面的屏幕截图所示,红色标签显示为ambiguous layout

如果我使用故事板,并添加相同的两个约束(底部,右侧),则标签没有不明确的位置。我做错了什么?

2 个答案:

答案 0 :(得分:1)

你想要的是超级视图。将标签和textview添加为此超级视图的子视图。

答案 1 :(得分:1)

问题可能是因为严格限制。由于文本内部的原因,所有标签都有自己的扩展限制。这些限制有一些优先权。可能的问题可能是您创建的约束具有较低的优先级,这会导致此类问题。尝试使用完整功能创建约束。这对我来说可以。这是我的代码,带有文本字段。

self.leadingLabelConstraint = [NSLayoutConstraint constraintWithItem:_markLabel
                                                               attribute:NSLayoutAttributeLeading
                                                               relatedBy:NSLayoutRelationEqual
                                                                  toItem:self
                                                               attribute:NSLayoutAttributeLeading
                                                              multiplier:1.0 constant:0];
    self.topLabelConstraint = [NSLayoutConstraint constraintWithItem:_markLabel
                                                           attribute:NSLayoutAttributeTop
                                                           relatedBy:NSLayoutRelationEqual
                                                              toItem:self
                                                           attribute:NSLayoutAttributeTop
                                                          multiplier:1.0 constant:0];
    [self.superview addConstraints:@[self.topLabelConstraint, self.leadingLabelConstraint]];
    self.heightLabelConstraint = [NSLayoutConstraint constraintWithItem:_markLabel attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:20];
    [self.markLabel addConstraint:self.heightLabelConstraint];

自我是 - UITextField

和markLabel是 - UILabel。