在纵向模式下,左侧有一个表格 View ,右侧有一个Web View 。它们都占据了屏幕的一半。我启用了自动版式。
但是,当我将屏幕旋转到横向模式时,tableview的宽度占用的空间不到屏幕大小的一半,而webview最终占据的空间更大,而不是均匀分割。
为什么会这样?无论屏幕方向如何, View 如何仅占据屏幕宽度的一半?
最佳答案
答案的前半部分解决了我们要在 View A(蓝色)和 View B(红色)之间平均划分 View 的情况。下半部分将解决以下情况:我们希望 View A占据一半的屏幕,但 View B不存在。
步骤1:
如图所示设置blue的自动布局约束。 super View 的0的顶部,左侧,底部。 0右边的红色 View 。
第2步:
为红色 View 设置相同但已镜像的约束。
如果正确完成了前两个步骤,则应该有一些自动布局错误和警告:
我们还需要一个约束条件来解决这些错误/警告并获得我们所需要的。
第三步:
按住控件,从一个 View 单击并拖动到另一 View ,然后选择“相等宽度”。现在,我们的 View 将始终保持相同的宽度。我们所有的自动布局警告和错误都会消失,并且无论方向或设备如何,我们的 View 始终都是屏幕的一半。
要使用VFL在代码中添加这些约束,我们需要以下约束:
@"H:|[blueView(==redView)][redView]|"
@"V:|[blueView]|"
@"V:|[redView]|"
现在,假设我们希望一个 View 占据一半的屏幕,而另一半没有 View 。我们仍然可以使用自动布局来做到这一点,但是设置略有不同。在此示例中,我们的 View 为蓝色,其父 View 为绿色。
步骤1:
这与上面的步骤1类似,除了我们不添加右侧约束(如果我们希望我们的 View 占据不同的一半,这显然会有所不同)。
第2步:
像以前一样,我们要分配“等宽”约束。在这种情况下,从我们的观点到父观点。再次,按住Control键并单击从一个拖动到另一个。
在这一点上,我们有一个自动布局警告。自动布局希望我们的框架与其父代的宽度相匹配。单击警告并选择“更新约束”将放入一个硬编码值。我们不希望这样做。
第三步:
选择 View ,然后转到其大小检查器。在这里,我们将能够编辑约束。
单击“等于以下宽度:”约束旁边的“编辑”。我们需要更改乘数。
我们需要将乘数值更改为2。
约束现在更改为“比例宽度为:”,并且我们所有的自动布局警告和错误都消失了。现在,我们的 View 将始终占据 super View 的一半。
要在代码中添加这些约束,我们可以使用VFL添加一些约束:
@"H:|[blueView]"
@"V:|[blueView]|"
但是比例宽度约束不能与VFL相加。我们必须这样添加它:NSLayoutConstraint *constraint =
[NSLayoutConstraint constraintWithItem:blueView
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:superView
attribute:NSLayoutAttributeWidth
multiplier:2.0
constant:0.0];
关于ios - 在自动布局中,无论方向如何, View 如何占据屏幕的一半?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26896844/