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

Posted

技术标签:

【中文标题】如何将乘数应用于在 nib 文件上创建的所有约束?【英文标题】:How can I apply multiplier to all my constraints created on nib files? 【发布时间】:2015-07-23 11:58:24 【问题描述】:

我几乎完成了我的项目,只是发现字体和空格在 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】:
self.view.constraints

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

for(NSLayoutConstraint *c in self.view.constraints)

     c.multiplier = [self constraintScale];

可能工作。希望对您有所帮助。

编辑: 抱歉只读问题。摆脱这个问题的另一种方法可能是;

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];

【讨论】:

对此感到抱歉。替换约束可能是另一种方式。祝你有美好的一天

以上是关于如何将乘数应用于在 nib 文件上创建的所有约束?的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 通过 Swift 更改约束乘数 [重复]

了解纵横比约束和乘数

创建标题 NIB 并在所有视图上显示

是否可以从加载到的视图中访问/操作 nib 文件中的约束?

使用没有 nib 的 NSTableView 创建 NSScrollView — TableView 上缺少约束

未应用 nib 约束的集合视图单元格