2016-09-15 95 views
0

我有以下代码来设置一个UILabel:当设置为自动换行如何获得的UILabel文本的实际宽度

let label = UILabel() 
label.numberOfLines = 0 
label.textAlignment = .center 
label.lineBreakMode = .byWordWrapping 
label.preferredMaxLayoutWidth = maxWidth 

label.text = "String that is long enough to cause word wrap." 

label.sizeToFit() 
self.view.addSubview(label) 

,我需要的是为标签自动换行,因为它会结果一旦达到label.preferredMaxLayoutWidth,然后实际上将自己的大小足够宽以适应包装文本。下面是一个图解说明: enter image description here

红框的宽度等于label.preferredMaxLayoutWidth,这就是我用上面的代码得到的实际大小。 黑盒子是我希望它的大小。 无论标签的大小是红色还是黑色,换行字都是一样的。

那么,如何在保持当前文字换行的同时将我的标签大小调整为尽可能小的宽度?

编辑:

虽然限制可能是通常的选择,在我的情况,我不认为这是因为我根据所得到的这个标签的尺寸大小我的上海华。

+0

您是否在寻找[平空间(http://www.thedesigncubicle.com/2008/12/tiny-tutorial-improve -justified型的设置/)? (请参阅*添加刷新空间部分*) – paulvs

+0

使用'NSString boundingRectWithSize:options:attributes:context:'(或String的Swift等效项)来获取所需的字符串大小。 – rmaddy

+0

@paulvs不,我不认为这是说同样的事情。 –

回答

1

好吧,我只是想通了。 @rmaddy在上面的问题评论中是正确的。在问这个问题之前,我已经看过boundingRectWithSize:options:attributes:context:,但很快就发现问题了。但现在我明白了。这是我更新的代码:

让利标签=的UILabel()

let text = "String that is long enough to cause word wrap." 
    let rect = text.boundingRect(with: CGSize(width: maxDesiredWidth, height:CGFloat.greatestFiniteMagnitude), options: NSStringDrawingOptions.usesLineFragmentOrigin, attributes: nil, context: nil) 

    label.numberOfLines = 0 
    label.textAlignment = .center 
    label.lineBreakMode = .byWordWrapping 
    label.frame = rect 

    label.text = text 

    label.sizeToFit() 
    self.view.addSubview(label) 
相关问题