当其他 UILabel 增长时自动收缩 UILabel

Posted

技术标签:

【中文标题】当其他 UILabel 增长时自动收缩 UILabel【英文标题】:Auto shrink UILabel when other UILabel grows 【发布时间】:2017-03-08 18:31:37 【问题描述】:

我有几个标签,它们不应该相互接触。见下图(忽略黄色字母):

总共有 4 个标签,2 个球员姓名和 2 个分数。播放器的名称将替换原始播放器标签文本。所以“玩家 1:”可以是任何宽度的任何文本。标签在视图中,在 UIStackView 中。每个 2 个标签(因此玩家的姓名和得分)都有自己的视图。在这个例子中,有 4 个标签,在 2 个 Views 中,在 1 个 UIStackView 中。这就是我想要的:

分数标签永远不会自动缩小,它们始终保持原始高度,并且如果内容(分数)增长,它们会自动增加宽度。因此,我将内容拥抱优先级设置为大于玩家名称标签的值。由于我不希望分数标签自动缩小,因此我将内容抗压缩优先级设置为大于玩家名称标签的值。

我将玩家名称标签文本设置为自动缩小值比例为 0.5。然而,当一个大的用户名出现时,它会像这样出现在分数标签上(我把原来的蓝色“0”变成了黄色):

用户名应该自动缩小,并且不应该触及分数标签。我该怎么做?

希望你能帮上忙!

编辑:我想在球员姓名和球员得分标签之间添加一个尾随空格。为此,我想从球员姓名到球员得分标签添加一个尾随空格。然而,当添加这个约束时,它也会占用整个分数标签。我当然希望它在触及乐谱标签时停止。图 1 显示了将尾随空格添加到分数标签时球员姓名的大小。它占用了分数标签膨胀。 :

还有约束:

我不想使用固定约束,因为这会导致在 iPad 或 iPhone SE 上运行它时出现问题。谢谢。

【问题讨论】:

UIStackView 不能使用内容压缩或拥抱属性。它还自己管理视图堆栈(而不真正关心自动布局)。我认为你最好直接将标签添加到视图中并在没有自动布局的情况下处理它。 是的,它是自动布局,堆叠在 UIStackview 中。我不知道如何做这件事。自动布局不会根据其他 UILabel 自动调整标签大小 我认为 UIStackView 不支持其中的标签内容拥抱。在更改整个代码之前,我将等待其他答案 玩家名字过长怎么办?我认为它最后应该有“...”,对吗?还有,玩家姓名标签和分数标签之间的空间,应该如何表现? 我可以回答最好的方法,但首先只是一个问题。名称是否应该占用最大空间然后缩小,或者如果分数为 0,您可以将名称一直延伸到单个数字 0? 【参考方案1】:

要完成此操作,请将 1 个 UIView 拖到情节提要或 xib 上。将 2 个 UILabel 拖到此视图中并将它们并排放置。向左/前标签添加顶部、底部、前导和尾随约束。尾随将在 UILabel 之间留出一些空间。将顶部、底部和尾随约束添加到第二个标签。现在将第一个(左/前导标签更改为 Autoshrink(最小字体比例 0.5)。同时更改前导标签-Content Hugging(水平-252,垂直 251)。现在单击右侧/尾随标签并更改 Content Hugging(水平- 251,垂直 251),更重要的是内容压缩阻力优先级在垂直和水平上均为 1000。现在选择包含这些标签的视图。命令 C 复制和粘贴命令 V 之外的任何位置。现在选择两个视图并转到顶部菜单在 Xcode 中并选择 Editor 和 -> Embed In -> UIStackView。将 stackview 设置为 Alignment .Center 和 Fill。将等高和等宽约束添加到在 stackview 中保存标签的 2 个视图。添加顶部(或底部或两者) ,前导,尾随对stackview的约束到它的superview。调整标签上的前导和尾随以添加一些填充。要在stackview中保存标签的两个视图之间添加填充,在它们之间添加一个视图并设置宽度约束(固定o r super 的百分比,无论你想要什么)到所需的填充。

【讨论】:

谢谢!它现在几乎可以工作了。因为我不能添加固定数字的约束(如果你将球员姓名固定到得分,它有一个固定的数字,比如 100),但是当我控制拖动我的球员姓名标签到分数标签时,并添加“尾随”,它会添加约束,但在标签之后。你知道如何在标签之间设置空格吗?如果你能回答你做得很棒,我会用一张照片更新它:) 我将在 GitHub 上发布我解释的示例,您可以查看它是否有效。给我几个 看看这个。应该和描述的一样。如果这是您要完成的任务,请将答案标记为正确。 github.com/agibson73/StackViewHorizontal 谢谢兄弟 :D 它的工作原理和我想要的完全一样。你做了一个了不起的工作!再次感谢!

以上是关于当其他 UILabel 增长时自动收缩 UILabel的主要内容,如果未能解决你的问题,请参考以下文章

UILabel 自动收缩不起作用

自动增加/减少 UITableViewCell 中的 UILabelView 高度?

UILabel 自动收缩并在必要时使用 2 行

当单元格的高度略微增长时,为啥我的标签不遵守我的自动布局约束?

字体更改时自动uiLabel和uiTableViewCell调整大小的iphone代码?

当 LynnBubbleTableView 框架中的内容增长时,如何移动到 tableview 的底部?