我有一个容器中的视图
在我放在这个容器中的一些视图控制器中,我希望有全局边缘
但我不知道如何将它们添加到容器中。
我的意思是我不知道如何定义NSLayoutConstraint来做我想做的事。
我希望从容器的左侧和右侧两侧的边距为20磅,关于其超级视图
答案 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像素)。