NSLayoutConstraint - 我想创建边缘

时间:2014-03-24 12:23:16

标签: ios nslayoutconstraint

我有一个容器中的视图

enter image description here

在我放在这个容器中的一些视图控制器中,我希望有全局边缘

但我不知道如何将它们添加到容器中。

我的意思是我不知道如何定义NSLayoutConstraint来做我想做的事。

我希望从容器的左侧和右侧两侧的边距为20磅,关于其超级视图

2 个答案:

答案 0 :(得分:1)

看起来应该是这样的:

// Get  view and bind that
UIView * view = childViewController.view;
NSDictionary *views = NSDictionaryOfVariableBindings(view); // @"view" : view
// add constraint to view with margins - -value- to supertview - | in horizontal axis
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20.0-[view]-20.0-|" options:0 metrics:metrics views:views]];
// The same for vertical axis
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20.0-[view]-20.0-|" options:0 metrics:metrics views:views]];

另外,请看一下本教程:http://commandshift.co.uk/blog/2013/01/31/visual-format-language-for-autolayout/。看起来很好。

祝你好运!

答案 1 :(得分:0)

您可以使用比官方API更直观的代码解决此问题(其中可视化格式最容易掌握,但仍然不是非常直观的恕我直言)。

如果您使用第三方类别,例如https://github.com/jrturton/UIView-Autolayout(我建议您这样做),可以使用尽可能少的代码解决此问题:

[yourView pinToSuperviewEdges:JRTViewPinLeftEdge|JRTViewPinRightEdge inset:20.0];

<强>更新

由于你的评论声明右边缘不起作用,你可以尝试单独设置边缘约束来调试它,如下所示:

[yourView pinEdge:NSLayoutAttributeLeft toEdge:NSLayoutAttributeLeft ofView:yourSuperView inset:20];
[yourView pinEdge:NSLayoutAttributeRight toEdge:NSLayoutAttributeRight ofView:yourSuperView inset:40];

更改第二个约束的插图,看看你是否正确。如果它突然看起来正确,插入50,你知道超级视图太宽(在这种情况下是30像素)。