UIStackView和多行标签?

时间:2017-11-01 22:49:28

标签: swift xcode interface-builder

我试图让这个工作起作用,但界面构建者正在努力,我想知道是否有人有适当的解决方案。

所以我想要一个包含内部有多行的标签的stackview。谷歌上的第一个点击(read here)告诉你将标签嵌入视图(A)中,然后将该视图拖动到另一个视图(B)(因为嵌入视图(A)有一个20像素的垫)然后取消了第一个观点(A)....瞧。除了这只是技巧水平堆栈的堆栈视图,如果你继续堆叠视图,你仍然会遇到很多问题(我将在后面的问题中展示截图)。

我发现谷歌上有another guide批评可能解决问题的方法,修复了stackviews的宽度。作者指出Apple并不打算让你这样做,毕竟它应该是自动布局,而不是固定布局。本指南推断该问题只是一个错误,您可以使用单行标签创建堆栈视图,将其全部设置,然后添加多行。我尝试了这个并且它没有工作,它只是搞砸了整个堆栈视图!除非标签的行数设置为1且仅为1,否则堆栈视图将会扭曲并基本上断开。(Image 1) Stackview with label set to have multiple lines.

所以我之前谈到过在视图中嵌入段落标签。 This doesn't cause any errors in the storyboard,(Image 2)您无法将文本与其他UIStack正确对齐,但这对我来说并不是一个直接的问题。什么是问题是在运行时发生的事情....  Simulator, Portrait (Image 3)Simulator, Landscape (Image 4)

我尝试在实际设备上运行此功能,看看它是否只是一个模拟器错误,但同样的事情发生在我的iphone 6上。可以说这可能无法正常工作!

哦,就在我们继续前进之前,我正在以下列方式构建堆栈视图:

[name - placeholder]
[phone - placeholder]
[address - placeholder]
, setting a spacing of 8 and equal fill
,vertically stacking all of these stacks (3 into 1) and setting a spacing of 8
, vertically stacking the details titles with the big stack and 8 spacing
,finally adding the title and button into the stack view with a spacing of 32.

然后我应用了一些故事板限制:在这种情况下,只是垂直居中&水平,因此视图始终居中并在两个屏幕方向上正确显示。

即使这没有正确对齐,这是应用堆栈和约束之前的视图,这就是我希望我的最终结果看起来像:Looks kind of silly, but I want to figure this out so I can actually stack my paragraphs! (Image - 5)

所以现在我希望我已经确定你可以在视图中真正嵌入标签,因为它在运行时没有正确呈现,你不能欺骗堆栈添加新线。

如何安全地将多行标签放入堆栈视图?

这几乎是一个分支问题但是当你尝试将堆栈应用于一个paragraphed标签时,它会将标签的宽度设置为绝对大量(有时会抛出一个错误,接口构建器无法呈现它{{ 3}}。我已经看过几次这种情况,并且真的不明白xcode如何认为这是一个明智的选择。

我不想将固定宽度应用于我的标签或堆栈,因为我只会留下另一个警告,并且警告不好!

我很遗憾该做什么,如果有人知道如何实现这一点,我将永远感激不尽!

由于

3 个答案:

答案 0 :(得分:0)

这似乎是一个错误。

对我有用的解决方法是在视图中嵌入多行标签并将其留在那里。

它修复了Storyboard编辑器上的布局,也适用于模拟器。

奇怪的是,如果我在同一个StackView上有多个多行标签,我只需要将其中一个嵌入到UIView中,然后所有其他多行标签都会正常运行。

答案 1 :(得分:0)

虽然我同意这是UIStackView中的一个问题,但布局应根据UILabel的固有大小来工作。 当使用带有多行标签的stackview时,它无法根据标签更新其大小。 要解决此问题,请使用标签的 preferredMaxLayoutWidth 属性并将其设置为任何值。

label.preferredMaxLayoutWidth = 1

注意:当我将其设置为1时,它甚至对我有用

Apple文档中定义的 preferredMaxLayoutWidth 属性:

  

当将布局约束应用于标签时,此属性会影响标签的大小。在布局期间,如果文本超出此属性指定的宽度,则其他文本将流到一个或多个新行,从而增加标签的高度。

我们希望增加垂直UIStackView。

答案 2 :(得分:0)

解决方案是将UILabel嵌入“无插图的视图”中。 然后更新您的约束。