如果内容不适合视图的第一行,则 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 【问题描述】:描述我的情况的最佳方式是使用图像。我所拥有的是一个包含几个UILabel
s 和UIImage
的视图。红框是UILabel
,如果内容太大,应该放到第二行。
从情节提要中,当内容适合时,我有一个工作案例,但问题是我不确定如何处理最后一个(红色框)应该进入第二行的案例。我正在使用autolayout
和cartography
。
如果有人能指出正确的方向,我将不胜感激。
【问题讨论】:
您想在单个标签中制作两行文字吗?如果是这样,那么您可以通过设置 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 在第二行的主要内容,如果未能解决你的问题,请参考以下文章
自动布局在 x 轴上居中 uilabel 适合内容,uiimage 跟随在左侧