iOS技术文档No.6 AppKit_NSStringDrawingContext文本计算

NSStringDrawingContext主要在计算文本宽高的时候回用到,平时并不会作为一个单独的对象被创建和使用。
iOS7之前计算文本大小用的是:sizeWithFont:constrainedToSize:lineBreakMode:
该方法在iOS7之后使用的话会报警告,iOS7之后新出的方法:boudingRectWithSize:options:attributes:context
返回文本绘制所占据的矩形空间:

- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(nullable NSDictionary *)attributes  context:(nullable NSStringDrawingContext *)context NS_AVAILABLE(10_11, 7_0);

参数:
size
宽高限制,用于计算文本绘制时占据的矩形块。
options
文本绘制时的附加选项。NSStringDrawingOptions包括四个枚举值,可以混合使用

typedef NS_OPTIONS(NSInteger, NSStringDrawingOptions) {
    NSStringDrawingUsesLineFragmentOrigin = 1 << 0, // 整个文本将以每行组成的矩形为单位计算整个文本的尺寸。 如果文本内容超出指定的矩形限制,文本将被截去并在最后一个字符后加上省略号。
    NSStringDrawingUsesFontLeading = 1 << 1, // 计算式包括行间距
    NSStringDrawingUsesDeviceMetrics = 1 << 3, // 计算布局时使用图元文字,而不是印刷字体。
    NSStringDrawingTruncatesLastVisibleLine NS_ENUM_AVAILABLE(10_5, 6_0) = 1 << 5, // 如果文本内容超出指定的矩形限制,文本将被截去并在最后一个字符后加上省略号。如果没有指定NSStringDrawingUsesLineFragmentOrigin选项,则该选项被忽略。
}

一般用这两个:
NSStringDrawingUsesFontLeading | NSStringDrawingUsesLineFragmentOrigin

如果为
NSStringDrawingTruncatesLastVisibleLine或者NSStringDrawingUsesDeviceMetric,那么计算文本尺寸时将以每个字或字形为单位来计算。

你可能感兴趣的:(iOS技术文档No.6 AppKit_NSStringDrawingContext文本计算)