ios - UILabel 自动换行

标签 ios objective-c uilabel word-wrap

我将 UILabel 设置为最多 2 行,当内容过多时自动换行。

我有一个问题,当只剩下一个单词时,它不会费心换行并截断文本。

无论剩余的文本有多长,我怎样才能让它包装所有文本?

(下面的第一个例子只缺少'aves'

Comparison

最佳答案

你遗漏了一些信息,所以这基本上是一个很有根据的猜测:

我假设您为此使用了自动布局(可能应该标记它)。

如果您将标签的 preferredMaxLayoutWidth 设置为比实际使用的值更高的值,则可能会导致您看到的行为。

我试了一下,现在可以重现结果了。

Playground Screenshot

如您所见(点击它),我在第 13 行将 preferredMaxLayoutWidth 设置为 310。但标签的实际宽度为 299 点(第 36 行)。

Autolayout 引擎将使用 310 而不是 299 来计算需要多少行。第一个字符串适合 310 pt 的行。宽,第二个字符串没有。这就是为什么只有第一个标签中的文本被截断的原因。

解决方案是不设置preferredMaxLayoutWidth。不过,这可能会对性能产生影响或产生任何其他负面后果。在这种情况下,您必须想办法将其设置为正确的值。

这是完整的 Playground ,以防有人想玩:

// Playground - noun: a place where people can play

import UIKit

var view = UIView(frame: CGRect(x: 0, y: 0, width: 315, height: 200))
view.backgroundColor = UIColor.lightGrayColor()

func addLabel(view: UIView) -> UILabel {
    let label1 = UILabel()
    label1.numberOfLines = 0
    label1.backgroundColor = UIColor.redColor().colorWithAlphaComponent(0.1)
    label1.setTranslatesAutoresizingMaskIntoConstraints(false)
//    label1.preferredMaxLayoutWidth = 310
    view.addSubview(label1)
    return label1
}

let label1 = addLabel(view)
let label2 = addLabel(view)

let views = ["l1" : label1, "l2" : label2]

view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-[l1]-8-[l2]", options: nil, metrics: nil, views: views))
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[l1]-|", options: nil, metrics: nil, views: views))
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[l2]-|", options: nil, metrics: nil, views: views))

label1.text = "How to Wear This Spring's Must-Haves"
label2.text = "The Best New Men's Fragrances For Spring 2015"


view.layoutIfNeeded()

view.frame
label1.frame
label1.preferredMaxLayoutWidth

label2.frame
label2.preferredMaxLayoutWidth

关于ios - UILabel 自动换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29032011/

相关文章:

ios - 如何在 iOS 上通过地址找出导致崩溃的数组的名称?

iphone - 如何在另一个 View Controller 中调用 NSNotificationCenter 函数?

ios - 带有 NSMutableAttributedString 属性文本的 UICollectionViewCell UILabel 更新和显示缓慢

objective-c - iOS JSON 身份验证 token 请求显示缺少参数

ios - Cocoa 编程的概念或技术问题

ios - 尽可能快地遍历数组的最佳方法?

ios - UILabel 垂直着色为 2 种颜色

ios - 在方向更改时维护 UITextView 的 contentOffset

iphone - 从 XCode 中的 .strings 文件中读取字符串

html - 如何使用 swift 解释 IOS 应用程序中的 HTML