如何将乘数应用于在nib文件上创建的所有约束?

时间:2015-07-23 11:58:25

标签: ios objective-c constraints xib ios-autolayout

我已经完成了我的项目,只是为了在iPhone 6Plus中实现奇怪的字体和空格。

我已经创建了拖放XIB文件的所有约束。我的同事在全局函数中添加了这些代码,因此我可以应用乘数:

- (float)constraintScale {
    if (IS_STANDARD_IPHONE_6_PLUS) {
    return 1.29;
}
return 1.0;}

- (float)textScale {
    if (IS_STANDARD_IPHONE_6_PLUS) 
  {
    return 1.16;
  }
return 1.0; }

我的问题是现在必须将每个(超过100个)约束拖到我的代码中,并使用这些乘数和比例应用每个约束。有没有更方便的方法将乘数添加到我的XIB文件?我已经考虑过继承,但这可能会花费相同的时间吗?

1 个答案:

答案 0 :(得分:1)

self.view.constraints

将为您提供视图的所有约束。

for(NSLayoutConstraint *c in self.view.constraints)
{
     c.multiplier = [self constraintScale];
}

可能有用。希望它有所帮助。

编辑: 对于readonly问题感到抱歉。另一种摆脱这个问题的方法可能是;

NSMutableArray *constraintsNew = [NSMutableArray new];
for (NSLayoutConstraint *c in self.view.constraints)
{
    NSLayoutConstraint *newC = [NSLayoutConstraint constraintWithItem:c.firstItem
                                                            attribute:c.firstAttribute
                                                            relatedBy:c.relation
                                                               toItem:c.secondItem
                                                            attribute:c.secondAttribute
                                                           multiplier:[self constraintScale]
                                                             constant:c.constant];
    [constraintsNew addObject:newC];
}

[self.view removeConstraints:self.view.constraints];
[self.view addConstraints:constraintsNew];