【发布时间】:2016-02-10 16:43:51
【问题描述】:
boundingRectWithSize 和使用 Swift 语言的多行 UILabel 遇到了一个奇怪的问题。我目前在 Xcode 游乐场工作,因此可以实时查看 UI 的结果和更新。
我要做的是根据它的内容动态计算给定的 UILabel 高度,我知道这已经在其他 StackOverflow 问题中讨论过,但这对我来说似乎太奇怪了。
多行标签以NSAttributedString 形式包含此文本。文本是一个简单的 Lorem ipsum 占位符:
Lorem ipsum dolor sit amet,consectetur adipiscing elit。 Donec a diam lectus。 Sed 坐 amet ipsum mauris。 Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit。 Donec et mollis dolor。
这是UILabel的代码:
let valueString = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor."
var dataValue = UILabel()
dataValue.numberOfLines = 0
dataValue.lineBreakMode = .ByWordWrapping
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .Justified
paragraphStyle.lineBreakMode = .ByWordWrapping
paragraphStyle.firstLineHeadIndent = 0.1
let attributedText = NSAttributedString.init(
string:valueString,
attributes:[NSParagraphStyleAttributeName:paragraphStyle, NSFontAttributeName:dataValue.font])
let textString = dataValue.text! as NSString
dataValue.attributedText = attributedText
dataValue.frame = CGRect(
x:CGFloat(kMargin),
y:dataType.frame.origin.y + CGFloat(kLabelHeight),
width:CGFloat((maxLabelWidth) - kMargin * 2),
height:textString.boundingRectWithSize(
CGSizeMake(CGFloat(kMaxWidth), CGFloat.max),
options:[.UsesLineFragmentOrigin, .UsesFontLeading],
attributes:[NSParagraphStyleAttributeName:paragraphStyle, NSFontAttributeName:dataValue.font],
context:nil).size.height)
问题在于 UILabel 只显示 3 行文本,停在文本的 mauris 单词处并截断最后一行,正如您从 Playground 预览功能中看到的那样:
【问题讨论】: