UILabel自适应大小的新方法boundingRectWithSize:options:attributes:context:

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liyux4869/article/details/39100557

iOS7以前我们对UILabel进行根据内容自适应大小的时候会使用方法sizeWithFont:constrainedToSize:lineBreakMode,但是这个方法在iOS7之后就被Deprecated了。对此,iOS7提供了一个新的方法来替代它,就是NSString的成员方法:

- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context;

相信很多人对于这个方法还比较陌生,尤其是不知道那个attributes参数是干啥用的。这里简单介绍一下这些参数:

参数:

size:

宽高限制,用于计算文本绘制时占据的矩形块。宽度的限制一般就是view的宽度,如果高度不限定的话就设为0就行了,例如{320,0}。


options:

文本绘制时的附加选项。可能取值请参考“NSStringDrawingOptions”.

具体有以下几个类型:

NSStringDrawingTruncatesLastVisibleLine

如果文本内容超出指定的矩形限制,文本将被截去并在最后一个字符后加上省略号。如果指定了NSStringDrawingUsesLineFragmentOrigin选项,则该选项被忽略。

NSStringDrawingUsesLineFragmentOrigin

绘制文本时使用 line fragement origin 而不是 baseline origin。

NSStringDrawingUsesFontLeading

计算行高时使用行间距。(译者注:字体大小+行间距=行高)

NSStringDrawingUsesDeviceMetrics

计算布局时使用图元字形(而不是印刷字体)。


attributes:

关于attributes官方的说明是这样的:

A dictionary of text attributes to be applied to the string. These are the same attributes that can be applied to an NSAttributedString object, but in the case of NSString objects, the attributes apply to the entire string, rather than ranges within the string.

但是我们用来计算label的大小的时候只需要用的font这个属性就行了,例如:

NSDictionary * attribute = @{NSFontAttributeName:[UIFont systemFontOfSize:18.0]};

context

context上下文。包括一些信息,例如如何调整字间距以及缩放。最终,该对象包含的信息将用于文本绘制。该参数可为 nil 。


返回值
一个矩形,大小等于文本绘制完将占据的宽和高。

具体的例子如下:



猜你喜欢

转载自blog.csdn.net/liyux4869/article/details/39100557
今日推荐