Xcode:将不同高度UILabels约束到固定大小的容器

时间:2017-02-16 20:42:09

标签: ios xcode autolayout interface-builder constraints

我正在构建一个包含测验的iOS应用。问题显示在屏幕的上半部分(见下文)。总有五种可能的答案。问题是:答案是程序生成的,长度各不相同,有时会导致标签中的换行符。

This is the current state

也许很难从图片中看出来,但是第一个和第二个之间以及第二个和第三个之间的间距与我想要的不一样。

This is what I had in mind

基本上,我希望顶部和底部标签与容器具有相同的空间。中间的标签应该彼此之间具有相同的间距,但是如果其中一个标签变大(当文本的大小超过宽度并且发生换行时),它们也应该适应。

为实现这一目标,我尝试了以下方法:

  • 将标签整理为堆栈视图:

    几乎工作,我在这里唯一的问题是,那个的大小 在显示堆栈视图后计算标签,这会导致在运行时将(可能的)较长文本应用于错误的约束/填充/边距。

  • 使用常规约束来组织标签

    我试过设置 中间标签的约束优先级低于 最顶层和最底层的那些,所以那些就是那些 调整大小,如果标签扩大,但它似乎在 运行时其中一个选择缩小,而其他 保持默认大小。

如果你能帮助我,我真的很感激,限制似乎总是让我痛苦......

2 个答案:

答案 0 :(得分:0)

我认为您案例中的最佳做法确实是使用UIStackView。那么你有多种选择来解决这个问题:

  1. 您可以将UIStackView的分布设置为Fill Proportionally,并将Minimum Font SizeMinimum Font Scale设置为UILabels
  2. 您还可以将UIStackView的分布设置为Fill,然后手动指定容器的高度。 UILabels应该还有一些Minimum Font SizeMinimum Font Scale
  3. 修改

    我刚刚意识到你想让所有UILabels拥有相同的字体大小。然后一个可能的解决方案是将UIStackView嵌入UIScrollView并限制UIStackView's LeadingTrailingTop和{{1约束Bottom ContentView的约束这样UIScrollView.的高度将根据UIScrollView所需的高度进行调整。

    希望这会对你有帮助!

答案 1 :(得分:0)

同意......我认为UIStackView工作正常,只需正确设置即可。

此外,您可能需要在设置文本时在标签上调用.sizeToFit。

我为你举了一个例子 - 尺码不准确,但你应该能够遵循这个技术......

https://github.com/DonMag/StackViewFun