【问题标题】:Constraints with variables变量约束
【发布时间】:2014-12-06 14:30:21
【问题描述】:

有没有办法把这个NSUInteger

NSUInteger number = 20;

在这个约束中?

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-25-[btn1]-25-[btn2(==btn1)]-25-[btn3(==btn1)]-25-[btn4(==btn1)]-25-[btn5(==btn1)]-25-|"  options:0 metrics:nil views:views]];

所以我希望它说 25 的地方是 20,但它应该由 number 表示。

注意:我希望最终产品最终使用可变宽度:

NSUInteger widthOfScreen = [UIScreen mainScreen].bounds.size.width;
NSUInteger width = (widthOfScreen - 55 * 5) / 6;

【问题讨论】:

    标签: objective-c constraints


    【解决方案1】:

    这就是metrics 参数的用途。您传递一个命名指标的字典,如下所示:

    @{@"number": 20}
    

    然后在视觉格式中,您使用该命名度量而不是硬编码数值

    @"H:|-number-[btn1]-number-[btn2(==btn1)]-number-[btn3(==btn1)]-number-[btn4(==btn1)]-number-[btn5(==btn1)]-number-|"
    

    【讨论】:

      【解决方案2】:

      如果您还有时间,请使用Masonry。它缩短了构建和修改约束所需的开发时间。对我来说,这是唯一的出路。变量可以只传递到约束生成器块中。

      [self.view mas_makeConstraints:^(MASConstraintMaker *make) {
          make.top.equalTo(number).with.offset(10);
          make.bottom.equalTo(@20).with.offset(10);
          make.left.equalTo([NSNumber numberWithFloat:20.0f]).with.offset(10).with.priorityHigh();
          make.right.eqalTo(number);
      }];
      

      【讨论】:

        猜你喜欢
        • 2016-02-21
        • 2021-09-12
        • 1970-01-01
        • 2013-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-02
        • 1970-01-01
        相关资源
        最近更新 更多