改进自动布局代码

时间:2014-04-29 09:45:42

标签: ios autolayout

以编程方式添加视图时,是否有更简洁的方法将其拟合到父视图而不是下面?

NSDictionary *views = @{ @"view" : view };
NSArray *horizontalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[view]-0-|" options:0 metrics:nil views:views];
NSArray *verticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[view]-0-|" options:0 metrics:nil views:views];
[parentView addConstraints:horizontalConstraints];
[parentView addConstraints:verticalConstraints];

2 个答案:

答案 0 :(得分:4)

不使用任何额外的依赖项,您的代码的最简洁版本是:

NSDictionary *views = @{ @"view" : view };
[parentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[view]|" options:0 metrics:nil views:views]];
[parentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|" options:0 metrics:nil views:views]];

(您不需要拥有数组变量,假定零填充,H:是默认轴值)。

冒着@uchuugaka投票失败的风险,您可以使用我的auto layout convenience category,这将允许以下内容:

[view pinToSuperviewEdges:JRTViewPinAllEdges inset:0];

答案 1 :(得分:1)

通过使用NSDictionaryOfVariableBindings()创建视图字典,您的代码可以稍微改进代码,但不会更正确。 如果要在视图边缘和相应的超视图边缘之间使用零间距约束,则可以省略VFL字符串中的破折号和零。

除此之外,您还需要使用DSL,这意味着需要学习其他东西,并且仍然可以根据真实形式进行理解和调试。