问题
我已经将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
}()
截图
如上面的屏幕截图所示,红色标签显示为ambiguous layout
如果我使用故事板,并添加相同的两个约束(底部,右侧),则标签没有不明确的位置。我做错了什么?
答案 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。