在自动布局中,无论方向如何,我怎样才能将视图占用一半的屏幕?

在肖像模式下,我有左侧的桌面视图和右侧的web视图。 他们都拿走了一半的屏幕。 我有自动布局启用。

但是,当我将屏幕旋转到横向模式时,tableview的宽度占用不到屏幕大小的一半,而webview最终会占用更多的空间,而不是平均分割。

为什么会这样呢? 无论屏幕方向如何,我怎样才能将视图占据屏幕宽度的一半?

答案的前半部分解决了我们希望在视图A(蓝色)和视图B(红色)之间均匀分割视图的情况。 下半部分将讨论我们希望看到A占据屏幕一半的情况,但是视图B不存在。

步骤1:

在这里输入图像说明

设置蓝色的自动布局约束如图所示。 顶部,左边,底部0到超级视图。 红色视图的权利为0。

第2步:

在这里输入图像说明

为红色视图设置相同的镜像约束。

如果您已经正确完成前两个步骤,则应该有一些自动布局错误和警告:

在这里输入图像说明

我们需要更多的约束来解决这些错误/警告,并得到我们所需要的。

第3步:

在这里输入图像说明

按住控制键,从一个视图单击并拖动到另一个视图,然后select“等宽”。 现在我们的视图将始终保持相同的宽度。 我们所有的自动布局警告和错误都消失了,无论方向或设备如何,我们的视图总是是屏幕的一半。

要使用VFL在代码中添加这些约束,我们需要以下约束:

@"H:|[blueView(==redView)][redView]|" @"V:|[blueView]|" @"V:|[redView]|" 

现在,假设我们希望单个视图占据一半的屏幕,但是我们对另一半没有看法。 我们仍然可以使用自动布局来做到这一点,但是它的设置稍有不同。 在这个例子中,我们的视图是蓝色的,其父视图是绿色的。

步骤1:

在这里输入图像说明

这与上面的步骤1类似,只是我们不添加右侧约束(如果我们希望视图占用不同的一半,这显然会有所不同)。

第2步:

在这里输入图像说明

像以前一样,我们要分配一个“等宽”限制。 在这种情况下,从我们的视angular来看父母的观点。 再次,按住控制并单击从一个拖动到另一个。

在这里输入图像说明

在这一点上,我们有一个自动布局警告。 自动布局需要我们的框架匹配其父宽度。 点击警告并select“更新约束”将把一个硬编码值。我们不想这样。

第3步:

在这里输入图像说明

select视图并转到其大小检查器。 在这里,我们将能够编辑约束。

点击“宽度等于:”约束旁边的“编辑”。 我们需要改变乘数值。

在这里输入图像说明

我们需要将乘数值更改为2。

现在约束变成“比例宽度为:”,我们所有的自动布局警告和错误消失。 现在我们的观点总是占据超级观点的一半。

要在代码中添加这些约束,我们可以使用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]; 

将它们两个绑定到超视图边缘(表格视图到前端,web视图到后端),并为它们设置约束具有相同的宽度。

XIBStoryboard创build一个UIView

  1. 设置顶部和左边的约束
  2. 设置高度限制
  3. 将宽度约束设置为等于超级视图的宽度*重要
  4. 通过将其转换为十进制来编辑约束的宽度

在这里输入图像说明

  1. 设置十进制的宽度,你想(在我的情况下0.5或一半)

结果

约束系统无法读取您的想法。 你必须说出你想要的。 一半是一半。 如果你想要一半,就说一半。 为了使视图的宽度超过其超视图宽度的一半,给它一个宽度约束,该宽度约束与其超视图宽度相比具有.5的乘数。