如何设置约束,以便视图的宽度为 0(如果它不能至少达到一定宽度)
How to setup constraints so a view's width is 0 if it can't be at least a certain width
我正在尝试创建一个布局有点复杂的启动屏幕故事板(因此没有代码)。
问题是我需要并排显示两个视图(有点像拆分视图控制器)。以下是要求:
- 左视图的宽度应为右视图宽度的一半。换句话说,左视图占据屏幕的左1/3。
- 左视图的宽度不应超过 375 点。这优先于第一个约束。换句话说,左视图应尽量占据屏幕左侧的 1/3,但不要超过 375。
- 左视图的宽度应至少为 340 磅。如果第一个约束的宽度使其小于 340,则应将其减小为 0,右视图应占据屏幕的整个宽度。换句话说,如果屏幕宽度小于1020,应该只有右视图可见。
所有这三个都必须应用于常规宽度尺寸 class。
我的前两个要求工作得很好。我不知道如何应用第三个要求。
这些是我目前的限制条件:
- LeftView.top = SuperView.top
- LeftView.bottom = SuperView.bottom
- LeftView.leading = 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.
是否存在某种约束组合(可能具有不同的优先级)可以强制左视图的宽度为 0(如果它不能至少为 340)?
附带说明一下,我什至对紧凑宽度有不同的要求,但我已经完成了所有这些工作。这只是我需要解决的常规宽度尺寸 class 内不同尺寸屏幕的最后一个要求。
看来我已经达到了你的要求。在 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
的内容。
我正在尝试创建一个布局有点复杂的启动屏幕故事板(因此没有代码)。
问题是我需要并排显示两个视图(有点像拆分视图控制器)。以下是要求:
- 左视图的宽度应为右视图宽度的一半。换句话说,左视图占据屏幕的左1/3。
- 左视图的宽度不应超过 375 点。这优先于第一个约束。换句话说,左视图应尽量占据屏幕左侧的 1/3,但不要超过 375。
- 左视图的宽度应至少为 340 磅。如果第一个约束的宽度使其小于 340,则应将其减小为 0,右视图应占据屏幕的整个宽度。换句话说,如果屏幕宽度小于1020,应该只有右视图可见。
所有这三个都必须应用于常规宽度尺寸 class。
我的前两个要求工作得很好。我不知道如何应用第三个要求。
这些是我目前的限制条件:
- LeftView.top = SuperView.top
- LeftView.bottom = SuperView.bottom
- LeftView.leading = 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.
是否存在某种约束组合(可能具有不同的优先级)可以强制左视图的宽度为 0(如果它不能至少为 340)?
附带说明一下,我什至对紧凑宽度有不同的要求,但我已经完成了所有这些工作。这只是我需要解决的常规宽度尺寸 class 内不同尺寸屏幕的最后一个要求。
看来我已经达到了你的要求。在 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
的内容。