如何设置约束,以使视图的宽度至少等于某个宽度时为0

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何设置约束,以使视图的宽度至少等于某个宽度时为0相关的知识,希望对你有一定的参考价值。

我正在尝试创建布局有点复杂的启动屏幕故事板(因此没有代码)。

问题是,我需要并排显示两个视图(有点像拆分视图控制器)。这是要求:

  1. 左视图的宽度应为右视图的宽度的一半。换句话说,左视图占据了屏幕的左1/3。
  2. 左视图的宽度应不超过375点。这优先于第一个约束。换句话说,左视图应尝试占据屏幕的左1/3,但不超过375。
  3. 左视图的宽度至少应为340点。如果由于第一个约束导致的宽度小于340,则应将其减小为0,并且右视图应占据屏幕的整个宽度。换句话说,如果屏幕宽度小于1020,则只有右视图应该可见。

这三个都必须应用于常规宽度尺寸类。

我有前两个要求可以正常工作。我不知道如何应用第三项要求。

这些是我目前的限制条件:

  • LeftView.top = SuperView.top
  • LeftView.bottom = SuperView.bottom
  • LeftView。Lead = SuperView。Leading
  • RightView.top = SuperView.top
  • RightView.bottom = SuperView.bottom
  • RightView.trailing = SuperView.trailing

那些将两个视图固定在侧面。以下附加约束设置了两个视图的宽度,以满足我的前两个要求:

  • LeftView.trailing = RightView.leading
  • [LeftView.width = 0.5 * RightView.width @ 999
  • LeftView.width <= 375

有了这些,您可以在各种iPad中查看结果。

[在纵向为12.9“的iPad上,您将看到左视图占据屏幕的左1/3,在右侧为右/屏幕的2/3。在横向为12.9”的iPad中,左视图最大在375处,右视图占据了屏幕的其余部分。到目前为止一切都很好。

在风景为9.7英寸的iPad上,您会看到左视图占据屏幕的左1/3,而右视图占据屏幕的右2/3。同样,很好。

我要解决的问题是从9.7英寸的iPad纵向肖像开始的。左视图占据了屏幕的1/3,但实际上是狭窄的。它只有256点宽。这比我想要的最小值还小340,我完全不希望出现左视图。右视图应填满整个iPad。

是否存在约束的组合,可能具有不同的优先级,如果不能小于340,可以将左视图的宽度强制为0?

作为旁注,我对紧凑的宽度甚至有不同的要求,但是我已经完成了所有这些工作。这只是我需要解决的常规宽度尺寸类别中不同尺寸屏幕的最后一项要求。

答案

好像我设法实现了您所需要的。在iPad 9.7英寸和12.9英寸上对其进行了测试,可以正常工作。有点混乱,但是有效。

诀窍是使用附加视图,如果屏幕小于1020点,则应为0点宽,否则为1点(我将其称为OnePixelWideView)。然后设置您的LeftView.width == 375 * OnePixelWideView.width @ 999

[另一个复杂之处在于,无论优先级如何,它都不会与LeftView.width = 0.5 * RightView.width @ 999一起使用,但是我们可以通过添加一个侧面固定为超级视图的视图(我将其称为FullscreenView)来解决此问题,并将LeftView.width <= 0.33 * FullscreenView.width ]

这里是水平约束的完整列表:

FullscreenView.leading = superview.leading
FullscreenView.trailing = superview.trailing

superview.trailing = OnePixelWideView.trailing + 1019
superview.leading = OnePixelWideView.leading @ 999
OnePixelWideView.width <= 1

LeftView.leading = superview.leading
LeftView.width <= 375
LeftView.width <= 0.33 * FullscreenView.width
LeftView.width = 375 * OnePixelWideView.width @999

RightView.leading = LeftView.trailing
RightView.trailing = superview.trailing

[Here是要播放的.storyboard内容。

以上是关于如何设置约束,以使视图的宽度至少等于某个宽度时为0的主要内容,如果未能解决你的问题,请参考以下文章

将宽度百分比设置为另一个宽度

iOS - 如何设置视图宽度等于 TableView 分隔符宽度

百分比约束宽度

视图宽度不等于单元格宽度 inseide uitable?

如何添加约束以使视图的尺寸在方向改变时不会改变?

iOS 约束。如何通过约束设置图像视图高度比率等于图像比率?