繁体   English   中英

如何使我的超级视图调整大小,以使其子视图的大小与Autolayout相匹配?

[英]How do I make my superview resize to match the size of its subviews with Autolayout?

我有一个UIView (“超级视图”),它具有几个UILabels作为子视图,在Interface Builder中设置。 我打开了自动布局功能,以正确地将所有标签依次排列在列表中。 这很好。

我现在想做的是使它的Superview垂直调整大小以匹配所有标签的高度,而我还不太清楚该怎么做。

这是如何运作的?

这是一个使用视觉布局的示例...因此,请忽略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;
}

我知道基本思想是确保子视图的内在内容大小驱动超级视图的高度,方法是确保每个子视图的内容压缩阻力和垂直方向上的内容拥抱约束都不会被添加的更高优先级约束所覆盖。

尝试使用UIView方法sizeToFit吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM