2

我有一个UIView(“superview”),它有几个UILabels作为子视图,在 Interface Builder 中设置。我已经打开了自动布局以正确地将列表中的所有标签一个接一个地隔开。这很好用。

我现在要做的是让我的 Superview 垂直调整大小以匹配我所有标签的高度,我不知道该怎么做。

这是如何运作的?

4

3 回答 3

1

这是一个使用视觉布局的例子......所以忽略 translatesAutoresizingMaskIntoConstraints 业务。

这依赖于容器视图没有任何高度限制并且它似乎依赖于视图之间的间距这一事实。系统将调整视图的大小以匹配子视图的要求。

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.backgroundColor = [UIColor redColor];

        [self setTranslatesAutoresizingMaskIntoConstraints:NO];

        _labelOne = [[UILabel alloc] init];
        _labelOne.text = @"Banana";
        _labelOne.backgroundColor = [UIColor blueColor];
        [_labelOne setTranslatesAutoresizingMaskIntoConstraints:NO];

        _labelTwo = [[UILabel alloc] init];
        _labelTwo.text = @"Dinosaur";
        _labelTwo.backgroundColor = [UIColor yellowColor];
        [_labelTwo setTranslatesAutoresizingMaskIntoConstraints:NO];

        [self addSubview:_labelOne];
        [self addSubview:_labelTwo];

        NSDictionary *views = NSDictionaryOfVariableBindings(_labelOne, _labelTwo);
        [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_labelOne]|" options:0 metrics:nil views:views]];
        [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_labelTwo]|" options:0 metrics:nil views:views]];
        [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[_labelOne(30)]-15-[_labelTwo(30)]-10-|" options:0 metrics:nil views:views]];
    }
    return self;
}
于 2013-08-05T15:53:26.047 回答
0

我知道基本思想是通过确保每个子视图的垂直维度中的内容压缩阻力和内容拥抱约束不会被您添加的更高优先级的约束覆盖,让子视图的内在内容大小驱动超级视图的高度.

于 2017-06-29T09:46:43.000 回答
-2

尝试使用 UIView 方法sizeToFit

于 2013-08-05T15:06:28.510 回答