将子视图的宽度比例设置为Superview的

时间:2014-07-17 19:37:10

标签: ios interface-builder

我正在设置一个看起来像这样的约束(红色超级视图中的子视图为白色):

我如何在界面构建器(最好)中执行此操作,如果不可能,那么代码,但是我应该将宽度设置为使IB满意?

我已经尝试过选择子视图和超级视图,但它不会让我以这种方式设置约束。

3 个答案:

答案 0 :(得分:8)

你可以完全在IB中完成。我不知道你的意思"我已经尝试过选择子视图和超级视图,但它不会让我设置那样的约束&#34 ;;确实,正好你必须做什么,以及它让你做什么 - 简而言之,那就是你怎么做这种关系。

我将分三个阶段描述整个事物。从您的子视图开始,绘制出顶部,左侧和右侧的初始约束:

enter image description here

现在选择视图及其超级视图并使用底部的弹出窗口设置相等的宽度(当然,当你完成时它们将不相等,但这只是为了形成约束本身):

enter image description here

最后,通过依次选择每个约束值并在属性检查器中编辑其常量来修复所有约束值。当然,值除了宽度关系外都需要为0;在那里,您将输入您在问题中提供的两个值:

enter image description here

你现在已经完成了,但如果你想要"未对齐"警告要消失,选择“更新所有帧”以使布局看起来与运行时的方式相同。或者只是运行它,看看你有什么!

编辑:在.xib中,您无法在顶级视图中形成width = width约束。要解决这个问题,请使用隐形干预"容器视图"充当顶级视图和其他所有内容之间的缓冲区。将容器视图的所有边的零值固定到顶级视图;现在,容器视图将作为其他所有容器的容器,并且您可以根据其宽度进行固定:

enter image description here

答案 1 :(得分:1)

我做了类似的事情,我希望子视图成为超级视图的25%。约束如下所示:

NSLayoutConstraint *c = [NSLayoutConstraint constraintWithItem:viewA
                       attribute:NSLayoutAttributeWidth
                       relatedBy:NSLayoutRelationEqual
                        toItem:viewA.superview
                        attribute:NSLayoutAttributeWidth
                        multiplier:.5
                        constant:(CGFloat)-20];


[viewA.superview addConstraint:c];

就IB而言,您可以设置宽度约束,然后编辑它并检查"在构建时删除占位符"框。 Here's a link to my blog post that describes it better

答案 2 :(得分:0)

如果没有容器视图,您可以通过添加Superview.CenterX

的尾随约束来实现
subView.left = superView.left

subView.right = superView.CenterX + 20