如果内容不适合视图的第一行,则 UILabel 在第二行

Posted

技术标签:

【中文标题】如果内容不适合视图的第一行,则 UILabel 在第二行【英文标题】:UILabel on second line if the content doesn't fit in the view's first line 【发布时间】:2017-02-21 12:17:01 【问题描述】:

描述我的情况的最佳方式是使用图像。我所拥有的是一个包含几个UILabels 和UIImage 的视图。红框是UILabel,如果内容太大,应该放到第二行。

从情节提要中,当内容适合时,我有一个工作案例,但问题是我不确定如何处理最后一个(红色框)应该进入第二行的案例。我正在使用autolayoutcartography

如果有人能指出正确的方向,我将不胜感激。

【问题讨论】:

您想在单个标签中制作两行文字吗?如果是这样,那么您可以通过设置 numberOfLine = 0 来实现。这是您需要的吗? 使用大于等于和***.com/a/39888662/6656894的约束 @Janmenjaya,不,我不想要那个。如果 ti 太大,我只想将整个标签移到第二行。 如果您想让标签从它所在的位置开始并扩展到第二行,请使用 Himanshu 的答案。或者将您的约束作为出口连接并管理自己以使约束更大。 不,这不是解决方案。如果 UILabel 是父级内部的唯一视图,那就没问题了。 【参考方案1】:

首先根据您当前标签的位置计算文本的宽度。

如果文本宽度大于当前标签的宽度,请从以下链接查看我的答案:

Auto Layout how to move the view2 from right to the bottom?

计算宽度:

func widthForView1(_ text:String, font:UIFont, height:CGFloat) -> CGFloat


let label:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: your_label_width, height: your_lable_height))
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.byWordWrapping
label.text = text
label.font = font
label.sizeToFit()
return label.frame.width

【讨论】:

我接受了你的回答,我设法以这种方式做到了,但是如何正确检查 uilabel 右上角是否没有超过父宽度? 宽度始终相同。我在 sizeToFit() 之后打印宽度,无论我作为字符串输入什么,它总是相同的。我的意思是 label.frame.size.width 的值。 在修复问题之前调用 layoutSubViews() 让 label:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: CGFloat.greatestFiniteMagnitude, height: height)) 试试这个..【参考方案2】:

你不能只用约束来做到这一点。要更改元素在屏幕上的整个位置,您需要以编程方式进行。

【讨论】:

没关系。但我想知道什么是最好的,正确的和简单的方法。只是逻辑 逻辑如下 1. 将 LABEL 放在 line1 上(例如在 Storyboard 中) 2. 设置 LABEL 的文本 3. 考虑它的大小(是否适合或应该替换?) 4. 如果大小== OK -> 保持原样 -> 替换标签 为此,您可能需要将一些约束存储为属性(例如 LABEL 的顶部约束和 Line2 2 视图的顶部约束)【参考方案3】:

使用标签View可以解决这个问题。 TagListView 是一个外部库。 当你添加一个视图作为 taglistView 的子类时,它的高度会自动增加。

将此添加到 pod 文件:pod 'TagListView'

func addTags() 
        let str1 = "Hi"
        tagListView.addTag(str1)
        let str2 = "Helloo"
            tagListView.addTag(str2)
        let str3 = "How Are u ? "
        tagListView.addTag(str2)
        tagListView.isUserInteractionEnabled = false
    

【讨论】:

我不确定您的确切意思。能否请您提供更多信息

以上是关于如果内容不适合视图的第一行,则 UILabel 在第二行的主要内容,如果未能解决你的问题,请参考以下文章

将 UILabel 设置为屏幕宽度和高度以适合包含的文本

自动布局在 x 轴上居中 uilabel 适合内容,uiimage 跟随在左侧

如何在 iOS 中仅缩进多行 UILabel 的第一行?

如何调整 UIView 的大小以获取大量 UILabel 并调整 UILabel 的大小以适合文本?

多行 UILabel 没有正确换行 [重复]

UILabel 上第一行的位置