使用Masonry for iOS根据子视图的大小调整视图大小

时间:2014-06-18 08:34:24

标签: ios objective-c uiview autolayout

我正在使用Masonry项目管理我的iOS AutoLayout,它运行良好。喜欢它到目前为止!但是,在弄清楚视图如何设置自身的大小限制时,我遇到了一些问题。基本上,从超级视图(父视图)我希望能够在子视图上做这样的事情,让我们说它的名为avatarView,

[self.avatarView makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(self.left);
            make.top.equalTo(self.top);
            make.height.equalTo(self.avatarView);
            make.width.equalTo(self.avatarView);
}];

现在我意识到这可能不是这样做的方法,但是,我基本上希望超级视图的能力告诉子视图嘿,无论你有什么尺寸都可以使用它作为约束。我在子视图中使用了Masonry AutoLayout,但是,它的所有子视图都有不变的大小限制,我认为这会自动为子视图提供合适的大小。我只是想用它!

到目前为止,根据我对砌体的经验,很容易根据另一个视图高度/宽度设置大小约束,或者设置一个常量约束作为高度/宽度,但这是我无法做到的一件事弄清楚!我知道在标准iOS中,开发人员可以使用intrinsicContentSize为视图提供最小大小限制,我试图使用它,但它似乎不起作用。有没有人知道intrinsicContentSize如何与Masonry互动?

有什么想法?有人经历过这个吗?

2 个答案:

答案 0 :(得分:0)

看起来你需要的只是

[self.avatarView makeConstraints:^(MASConstraintMaker *make) {
    make.edges.equalTo(self);
}];

假设(正如你所提到的)子视图有一些固定的或固有的大小,这将非常“包装”子视图并使用它的大小。

附注 - 如果要将一个属性设置为等于另一个视图的相同属性,则无需在后者中指定它。换句话说,而不是

make.left.equalTo(self.left);

你可以使用

make.left.equalTo(self);

此外,您可以链接多个属性:

make.top.left.equalTo(self);

答案 1 :(得分:0)

是的,你可以做到。请确保设置:

superView.translatesAutoresizingMaskIntoConstraints = NO;

样本可能是:

[self.avatarView makeConstraints:^(MASConstraintMaker *make) {
    make.edges.equalTo(self);
    make.size.mas_equalTo(CGSizeMake(100.f, 100.f));
}];

然后superView的大小将与avatarView相同。