【发布时间】:2022-01-27 00:28:55
【问题描述】:
我有一个垂直堆栈视图,里面有多个横向堆栈视图,我不知道如何为它们设置约束,因此它们的高度和宽度将是“动态的”(取决于水平堆栈数)。
垂直堆栈应在所有设备上全屏显示,因此其限制为 20:20:20:20 按钮的宽高比应为 1:1
即使我为垂直堆栈视图设置了约束,它也会由于某种原因离开屏幕。
水平堆栈视图:
垂直堆栈视图:
【问题讨论】:
标签: swift storyboard
我有一个垂直堆栈视图,里面有多个横向堆栈视图,我不知道如何为它们设置约束,因此它们的高度和宽度将是“动态的”(取决于水平堆栈数)。
垂直堆栈应在所有设备上全屏显示,因此其限制为 20:20:20:20 按钮的宽高比应为 1:1
即使我为垂直堆栈视图设置了约束,它也会由于某种原因离开屏幕。
水平堆栈视图:
垂直堆栈视图:
【问题讨论】:
标签: swift storyboard
你的约束太强了。您是说垂直堆栈视图的 4 条边应该 等于 与超级视图的 4 条边(+ 一些常数),和,而不会扭曲任何图像,和 所有图像的宽度必须相同,它们之间的间距为 10。这是不可能的。
您在这里看到的是布局系统试图满足垂直堆栈视图的前沿和后沿应该等于父视图的前沿和后沿的约束。但是,这会使图像太大,这意味着总高度变得太大而无法在屏幕上显示,从而打破了顶部和底部边缘的限制。如果我们试图满足顶部和底部边缘约束,图像需要更小,我们最终会打破前边缘和后边缘约束。
您的意思是说垂直堆栈视图的 4 条边不应超过超级视图的 4 条边,对吧?那是“小于或等于”或“大于或等于”的关系,而不是“等于”。
你应该添加:
但是,仅仅这四个还不足以确定垂直堆栈视图的确切位置。您仍然需要一些等式约束。
由于您似乎希望它水平居中,您应该在堆栈视图上添加一个 centerX 约束。图像可能并不总是足够大以填满底部,因此使底部等式约束具有较低的优先级。您始终可以完全删除底部约束,但这会使图像不会扩展以填充底部空间,即使它可以。似乎您希望图像始终从顶部开始,因此顶部约束可以保持不变。不再需要前导和尾随约束,因为 centerX 约束已经确定了堆栈视图的水平位置。
【讨论】: