【问题标题】:Fit a stackview containing more stackviews in a view在视图中适合包含更多堆栈视图的堆栈视图
【发布时间】:2019-11-26 23:10:16
【问题描述】:

我有一个看起来像这样的布局。视图控制器嵌入在导航控制器中,而导航控制器又嵌入标签栏控制器中,因此视图同时具有顶部和底部栏。

标签和 3 个按钮有高度限制。并且灰色视图有一个宽高比约束集。

标签和灰色视图嵌入在一个堆栈视图中。并且 3 个红色按钮嵌入在一个堆栈视图中。最后将 stackview 和嵌入到单个 stackview 中。

包罗万象的stackview设置了前导、顶部和尾随约束。

当我在像 XS 这样具有更大屏幕的 iPhone 上运行它时,没有问题。

但是当我在 SE 等较小的屏幕上运行它时,底部会隐藏在标签栏后面。

为了让主堆栈视图适合所有 iPhone 的屏幕尺寸,我需要设置什么约束?

我尝试为堆栈视图设置一个低优先级的底部约束,但这似乎也不起作用。

我认为原因之一是我为标签和按钮设置的高度限制。但我不确定如何将高度设置为动态调整大小。

Demo project

【问题讨论】:

  • 实际上,我解决了这个问题,但我不确定这是否是预期的结果......基本上,你的目标是让灰色视图成为一个正方形,这可能是无效的以防万一显示在较小的屏幕上。
  • 另外,您可以将灰色视图设为正方形,但在较小的屏幕上它会比预期的要小。

标签: ios swift autolayout uistackview


【解决方案1】:

问题是因为你没有底部约束,所以方面约束会拉伸视图,这将使底部按钮位于标签栏下方

你需要从主stackview中移除top label和middleView,并将约束设置为

1-标签-前导,尾随,顶部和高度''''高度是可选的

2- middleView - 前导,尾随,顶部到标签

3- stackview -leading , trailing , top to middleView , bottom to view

middleView 的高度将根据屏幕的高度,如果您希望它是正方形的,则将前导和尾随替换为 centerX 和 aspectRatio 为 1

【讨论】:

  • label+middleView 都在各自的stackview 中。你是说我也应该从中受益,对吗?
  • 试过了。 3个按钮都搞砸了。请参阅constraintsresult
  • 我删除了按钮的高度限制,并为它们设置了相等的高度。在大屏幕上,它看起来像this,在小屏幕上看起来像this。有没有办法为按钮设置最小高度约束?所以在更大的屏幕上,它们的高度将是 40,而在较小的手机上,它们会降低到最小高度?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多