【问题标题】:Xcode Storyboard - Multiple stack views with a mulitline label [duplicate]Xcode Storyboard - 带有多行标签的多个堆栈视图[重复]
【发布时间】:2018-05-09 04:08:48
【问题描述】:

刚开始在Xcode 中开发iOS 应用程序。

在Storyboard 中,我有八组Labels,需要放在水平/垂直Stack Views 中。其中之一是多行Label,即设置为2 的行和文本插入了一个换行符,使用Ctrl+Enter。

我想要实现的是(更多的是概念插图而不是视觉插图):

+---------------Stack View+1-(100%)-------------------+
| +--Stack View 2-(50%)-+ | +---Stack View 3-(50%)--+ |
| |Label 1              | | | +--Stack+View 4-----+ | |
| +---------------------+ | | |Label 3|Label 4    | | |
| |Label 2              | | | +-------+-----------+ | |
| |Multiline            | | +-----------------------+ |
| +---------------------+ | | +--Stack+View 5-----+ | |
|                         | | |Label 5|Label 6    | | |
|                         | | +-------+-----------+ | |
|                         | +-----------------------+ |
|                         | | +--Stack+View 6-----+ | |
|                         | | |Label 7|Label 8    | | |
|                         | | +-------+-----------+ | |
|                         | +-----------------------+ |
+-------------------------+---------------------------+

Stack View 1 应该与屏幕一样宽。 Stack Views 2 和 3 应该扩大到屏幕宽度的一半。两者都应相应扩展。 Labels 4, 6, 8 应该扩展以填充 Stack View 3 的剩余宽度,而 3, 5, 7 应该只有足够宽以适合文本.

我将使用对最外层水平Stack View 的约束来拥抱边缘。

将单行 Labels 添加到 Stack Views 甚至将这些 Stack Views 添加到 Stack View 都可以按预期工作。

但是,将单行 Label 和多行 Label 添加到 Stack View 会导致 Stack View 变为 zero width:

将这个垂直的Stack View 添加到另一个Stack View 使得新的Stack View 具有极宽的width:

在没有多行 Label 的情况下执行相同操作可以按预期工作。如何使用多行 Label 实现我的预期布局?

我尝试在 Stack Views 上设置约束,但我尝试过的任何方法似乎都不起作用。

编辑:我在这里找到了解决方案:Multiline label in UIStackView。我的问题不是有多个Labels(我之前正在搜索),而是多行Label。在添加到 Stack View 之前将多行 Label 嵌入到 View 中解决了这个问题。

【问题讨论】:

  • 你能分享你的故事板吗?

标签: ios xcode user-interface storyboard


【解决方案1】:

最外层的 stackview 需要 3 个约束,top、leading 和 trailing。它将根据其 contentSize 推断高度约束。

您需要在 substackviews 上设置水平内容拥抱和水平内容压缩值,以便最外面的 stackView 在空间太少/太多时知道要压缩/扩展哪个堆栈(除非您选择与填充不同的分配方法,比如大小相等)。

您需要对具有多个标签的堆栈视图执行相同的操作。您还应该正确设置标签行为(即自动换行、缩小以适应、numberOfLines 等)。

【讨论】:

  • 尝试设置约束但没有运气...具体到我的情况,顺序是什么?
  • 这些是正确的约束。您是否为每个子视图设置了水平内容拥抱和内容压缩?我无法告诉您在这里使用什么值,因为就标签宽度而言,我不知道您的意图是什么。当您使用 stackviews 时,您要么需要 1) 固定比例的视图或间距,要么 2) 了解当空间或多或少时元素将如何收缩和扩展,以便您可以相应地设置内容属性。
  • 在添加到StackView 之前将多行Label 嵌入到View 中解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-25
  • 1970-01-01
  • 2019-11-26
  • 2011-07-08
相关资源
最近更新 更多