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

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

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

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

【问题讨论】:

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

标签: ios objective-c swift autolayout ios-autolayout


【解决方案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
    }

【讨论】:

  • 我不确定您的确切意思。能否请您提供更多信息
猜你喜欢
  • 1970-01-01
  • 2021-02-05
  • 2022-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多