迫使UILabel占用3条线

时间:2017-01-29 20:53:23

标签: swift swift3 uilabel

我正在制作音乐播放器并为歌曲,专辑和艺术家设置标签。现在,仅仅为了UI,我希望歌曲标签总是使用3行的空格,即使文本是1行。我在属性检查器中将行数设置为3,但如果歌曲标题实际上很长,它只显示3行!

我对解决方法的第一个想法是将标签的高度锁定为文本大小的3倍(然后一些用于间距)。可能有更好的解决方案吗?或者我可以使用不同的对象?

3 个答案:

答案 0 :(得分:1)

要强制UILabel占用音乐播放器中的三行,您只需要在\n的适当位置添加换行符,并将标签的行设置为3.

添加换行符

var title = "Title"
var album = "Album"
var artist = "Artist"

label.text = "\(title)\n" +
      "\(album)\n" +
      "\(artist)\n"

将标签设置为3行:

label.numberOfLines = 3 // or set this to 4 or higher if the title of the song might exceed one line

答案 1 :(得分:0)

我需要完成类似的操作-无论文本如何,我都需要UILabel始终为两行。

经过一些实验,我发现仅在文本高出一行的情况下,天真地在文本末尾添加新行会产生所需的行为。如果由于内容而导致文本已经高出两行,则第二行末尾会出现省略号。

我使用了另一个问题的代码来确定我的文本实际呈现的行数,如果少于期望的行数,我会在字符串的末尾附加一个换行符\nHow to find actual number of lines of UILabel?

只需向您的UILabel末尾添加尽可能多的换行符,即可达到所需的行数。 (请注意,我在上述问题中使用的代码将返回比实际文本多1行的行,因此我的逻辑类似于if desiredLines >= myLabel.numberOfVisibleLines { /*Appened \n to string*/}

答案 2 :(得分:0)

您可以尝试这种方法:

  1. 获取一个UILabel并将其放入UIStackView中。

  2. 设置UILabel.amountOfLines = 3

  3. 在标签下方的UIStackView中添加另一个UIView。

  4. 配置自动布局,以使UILabel内部内容的优先级高于UIView。

  5. 将UIStackView的高度严格限制为3行高度。

结果应该是,无论文本有多少行,“堆栈”视图都将处于预期的高度。但是,内在本质将使文本推送标签,只要它具有填充其三行的文本即可。

相对于公认的答案,您无需关心文本是什么,因此这更有可能帮助需要此类内容的其他读者。