【问题标题】:Centering a view within it's superview with Masonry使用 Masonry 在其超级视图中居中视图
【发布时间】:2015-11-29 12:15:33
【问题描述】:

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

我想将标签添加到视图中并在视图中水平居中。

但是我用砖石创建的约束不能正常工作。

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 在其“超级视图”中正确居中视图?

【问题讨论】:

  • 你的代码对我有用,你能解释一下什么对你不起作用吗?如果视图必须在其父视图内,调用make.centerX 是不够的,还要将其垂直定位在视图调用make.center.equalTo(b) 内。
  • 啊,对不起,我只想水平居中。对我来说,当我使用该约束(在我的示例中)时,子视图不会显示。

标签: ios masonry-ios-osx


【解决方案1】:

如果你添加一个顶部约束,它会起作用:

[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)
}];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 2013-12-26
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    相关资源
    最近更新 更多