4

使用自动布局我正在开发一个包含 UILabel 的容器 UIView。我想根据 UILabel 的高度动态地制作容器视图的高度。

我在容器视图中添加了这些约束,但我不知道如何判断 UILabel 的高度,因为它是一个多行 UILabel。

- (void) updateConstraints{

[self removeConstraints:self.constraints];

NSDictionary *views = NSDictionaryOfVariableBindings(_informationLabel);

// -- Constraints

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-5-[_informationLabel]-5-|"
                                                             options:0
                                                             metrics:@{}
                                                               views:views]];

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-5-[_informationLabel]-5-|"
                                                             options:0
                                                             metrics:@{}
                                                               views:views]];
[super updateConstraints];}

我尝试使用boundingRectWithSize度量字典计算高度并发送高度。

在 ViewController 我没有指定容器视图的高度,让它根据子视图的高度调整大小:

[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-100-[_informationView]"
                                                                         options:0
                                                                         metrics:@{}
                                                                           views:views]];

[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[_informationView]-|"
                                                                         options:0
                                                                         metrics:@{}
                                                                           views:views]];

如何使容器视图高度随着 uilabel 高度的增长而增长?

4

1 回答 1

1

intrinsicContentSize行文本 ( UILabel& NSTextView) 是不明确的。这是因为高度取决于尚未计算的宽度。为了解决这个问题,你必须允许第一次布局,然后设置preferredMaxLayoutWidth专门解决这个问题的新添加的属性。

// Inside superview
- (void)layoutSubviews
{
  [super layoutSubviews];
  self.informationLabel.preferredMaxLayoutWidth = self.informationLabel.frame.size.width;
  [super layoutSubviews];
}

来源: http ://www.objc.io/issue-3/advanced-auto-layout-toolbox.html

于 2014-08-26T18:29:55.657 回答