UIStackView中的多行标签

将多行标签(将换行符设置为Word Wrap)放入堆栈视图时,标签立即丢失换行符,并将标签文本显示在一行中。

为什么会发生这种情况,以及如何在堆栈视图中保留多行标签?

  1. UILabelembeddedUIView (编辑器 – >embedded – >视图)
  2. 使用约束来将UILabel适配到UIView (例如,尾部空间,顶部空间和前导空间到超级视图约束)

UIStackView将扩展UIView以适应, UIView将限制UILabel多行。

  • 首先将标签number of lines设置为0
  • 除非给出一个固定宽度的multiLine否则stackview将不会增长为multiLine stackview 。 当我们修正stackview的宽度然后当达到如下所示的宽度时,它stackview多行:

在这里输入图像说明

如果我们不给一个固定的宽度stackview然后事情变得模糊。 stackview与标签stackview增长多久(如果标签值是dynamic的)。

这就是为什么我们给stackview一个固定的宽度。

希望这可以解决您的问题。

对于具有UIlabel作为其视图之一的水平堆栈视图,在界面生成器中,首先将UIlabel行数设置为0.这应该允许标签具有多于一行。 当堆栈视图有alignment = fill的时候,最初这个失败了。 为了使它工作简单地设置堆栈视图alignment = center。 现在标签可以扩展到堆栈视图中的多行。

苹果文档说

对于除填充alignment之外的所有alignment,堆栈视图在计算垂直于堆栈轴线的大小时使用每个排列的视图的内部“内容大小”属性

注意这里除了这个词。 当使用填充时,水平堆栈视图不会使用排列的子视图大小垂直调整其自身。

只需在标签的属性检查器中将行数设置为0即可。 它会为你工作。

在这里输入图像说明

IOS9 +

设置UILabel的文本后调用[textLabel sizeToFit]。

sizeToFit将使用preferredMaxWidth重新布局多行标签。 标签将调整stackView的大小,这将调整单元格的大小。 除了将堆栈视图固定到内容视图之外,不需要额外的约束。

就我而言,我遵循了以前的build议,但我的文本仍然被截断成一行,尽pipe只是在风景中。 原来,我在标签的文本中find了一个看不见的\0空字符,这是罪魁祸首。 它一定是与我插入的em短划线符号一起引入的。 要看你的情况是否也发生这种情况,使用查看debugging器来select你的标签并检查它的文本。

 Add UIStackView properties, stackView.alignment = .fill stackView.distribution = .fillProportionally stackView.spacing = 8.0 stackView.axis = .horizontal instead of adding label inside UIView which is not required. If you are using inside UITableViewCell please, reload data on rotation.