ios - 自动布局, View 高度取决于 subview 高度

标签 ios autolayout

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

我在容器 View 中添加了这些约束,但我不知道如何判断 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 计算高度并将高度发送到 metrics 字典中。

在 ViewController 中,我没有指定容器 View 的高度以让它根据 subview 的高度调整大小:

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

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

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

最佳答案

多行文本(UILabel & NSTextView)的intrinsicContentSize不明确。这是因为高度取决于尚未计算的宽度。为了解决这个问题,你必须允许布局的第一遍,然后设置新添加的属性 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

关于ios - 自动布局, View 高度取决于 subview 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19875777/

相关文章:

objective-c - 如何使用平移手势旋转文本字段?

ios - 如何从堆栈中删除旧的 ViewController

ios - UICollectionViewCell内部的UITextView坚持水平增长

ios - AutoLayout 动态 .xib View 高度

ios - 如何在 UITableViewCell 单元格中隐藏具有大小的按钮?

ios - 如何通过 FMDB 将数据保存和检索到 sqlite

ios - 为什么在 UIView 中有一个 frame 矩形和一个 bounds 矩形?

ios - 前缘的自动布局约束

ios - UIScrollView 中的 UIWebView 具有自动布局

ios - 动态更改静态单元格上的节标题文本