Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 设置子视图';s宽度占Superview的比例';s_Ios_Interface Builder - Fatal编程技术网

Ios 设置子视图';s宽度占Superview的比例';s

Ios 设置子视图';s宽度占Superview的比例';s,ios,interface-builder,Ios,Interface Builder,我正在尝试设置如下所示的约束(红色的子视图,白色的superview): 我应该如何在interface builder中做到这一点(最好是这样),如果不可能,那么编写代码,但我应该把什么作为宽度来让IB满意呢 我尝试过选择子视图和超级视图,但它不允许我这样设置约束。我也做过类似的事情,我希望子视图占超级视图的25%。约束如下所示: NSLayoutConstraint *c = [NSLayoutConstraint constraintWithItem:viewA

我正在尝试设置如下所示的约束(红色的子视图,白色的superview):

我应该如何在interface builder中做到这一点(最好是这样),如果不可能,那么编写代码,但我应该把什么作为宽度来让IB满意呢


我尝试过选择子视图和超级视图,但它不允许我这样设置约束。

我也做过类似的事情,我希望子视图占超级视图的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,您可以只设置一个宽度约束,然后编辑它并选中“在构建时删除占位符”框

完全可以在IB中完成。我不知道您所说的“我已尝试选择子视图和超级视图,但它不允许我以这种方式设置约束”是什么意思;事实上,这正是你必须做的,也正是它将让你做的——简言之,这正是你处理这种关系的方式

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

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

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

现在已完成,但如果希望“未对齐”警告消失,请选择“更新所有帧”,使布局看起来与运行时相同。或者运行它,看看你有什么

编辑:在.xib中,您将无法形成顶层视图的宽度=宽度约束。为了避免这种情况,使用一个不可见的中间“容器视图”作为顶级视图和其他所有视图之间的缓冲区。将所有侧面均为零值的容器视图固定到顶层视图;现在,“容器”视图将充当其他所有内容的容器,您可以根据其宽度锁定:


如果没有容器视图,可以通过使用
Superview.CenterX

subView.left = superView.left

subView.right = superView.CenterX + 20

谢谢你的回复。您是否介意编辑您的解决方案,以便它能真正实现我的要求。这意味着可能是
0.5f
而不是
0.25
,但是
20
呢?好的,按照您的要求编辑-我认为应该可以。尝试这样做时,所有复选框(包括相等宽度)都不可选择。这与主视图是superview有关吗?不,不是。无论这两个视图是什么,都可以在它们之间形成宽度相等的关系。-不管怎样,屏幕截图证明了你能做到。以下是我所拥有的:。所有框都不可选择。蓝色的按钮放在一个UIView容器中,即“子视图”,主视图是“超级视图”。啊。这是因为你在一个.xib,而不是一个.storyboard。你必须在顶层引入一个额外的“容器视图”,将其固定在主视图的各个侧面,以提供一些可以固定的内容。不,你会没事的。只需使用“容器视图”。我将添加一个屏幕截图。