使用Masonry在父视图中居中一个子视图

6

我正在尝试在iOS中使用Masonry。我有一个标签和一个视图。

我想将标签添加到视图中,并使其水平居中于视图中。

但是,我使用Masonry创建的约束无法正确运行。

UILabel *a = [UILabel new];
a.text = @"Hi";
a.textColor = [UIColor blackColor];
[a sizeToFit];

UIView *b = [UIView new];
b.frame = CGRectMake(0, 0, CGRectGetWidth(a.frame) + 18.0f, 19.0f);
[b addSubview:a];

[a mas_makeConstraints:^(MASConstraintMaker *make) {
    make.centerX.equalTo(b.mas_centerX);
}];

如何使用Masonry在“superview”中正确居中一个视图?

你的代码在我这里可以运行,你能解释一下在你那边出了什么问题吗?如果视图必须在其父视图内部,调用 make.centerX 将不足以使其在垂直方向上定位于视图中,请调用 make.center.equalTo(b) - Daehn
啊,抱歉,我只想水平居中。在我的例子中,当我使用那个约束时,子视图没有显示。 - Tiago Veloso
1个回答

7
如果您添加顶部约束,则会起作用:
[a mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.equalTo(@0)
    make.centerX.equalTo(b);
}];

不过,您可以选择完全自动布局,摆脱设置framesizeToFit的麻烦:

UILabel *a = [UILabel new];
a.text = @"Hi";
a.textColor = [UIColor blackColor];

UIView *b = [UIView new];
[b addSubview:a];

[a mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.equalTo(@0);
    make.centerX.equalTo(b);
}];

[b mas_makeConstraints:^(MASConstraintMaker *make) {
    make.width.equalTo(a).with.offset(18)
    make.height.equalTo(a)
}];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接