我正在使用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互动?
有什么想法?有人经历过这个吗?
答案 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
相同。