iOS自适应高度
NSDictionary *attrs = @{NSFontAttributeName : self.titleLabel.font};
CGFloat titleW = [title boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs context:nil].size.width;
// 返回文本绘制所占据的矩形空间。
- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context
// 参数1
参数1. Size:(CGSize)size // 计算的尺寸所能占据的最大尺寸,(宽高限制,用于计算文本绘制时占据的矩形块)。
参数2. options:(NSStringDrawingOptions)
参数3. attributes:(NSDictionary *)attributes
// attributes使用字典设置属性
参数4. context:(NSStringDrawingContext *)
context上下文。包括一些信息,例如如何调整字间距以及缩放。最终,该对象包含的信息将用于文本绘制。该参数可为 nil
// options NSStringDrawingOptions 四种形式
typedef NS_ENUM(NSInteger, NSStringDrawingOptions) {
NSStringDrawingTruncatesLastVisibleLine = 1 << 5, // Truncates and adds the ellipsis character to the last visible line if the text doesn't fit into the bounds specified. Ignored if NSStringDrawingUsesLineFragmentOrigin is not also set.
// 1. 翻译: 如果文本内容超出指定的矩形限制,文本将被截去并在最后一个字符后加上省略号。
如果没有指定NSStringDrawingUsesLineFragmentOrigin选项,则该选项被忽略。
NSStringDrawingUsesLineFragmentOrigin = 1 << 0,
// The specified origin is the line fragment origin, not the base line origin
// 2. 绘制文本时使用 line fragement origin 而不是 baseline origin。
NSStringDrawingUsesFontLeading = 1 << 1,
// Uses the font leading for calculating line heights
// 3. 计算行高时使用字体行距。(注意 : 字体大小+行间距=行距)
NSStringDrawingUsesDeviceMetrics = 1 << 3,
// Uses image glyph bounds instead of typographic bounds
// 4. 计算布局时使用图元字形(而不是印刷字体)。
} NS_ENUM_AVAILABLE_IOS(6_0);
// 封装好的根据计算文本和字体size 计算在View中的所占的Size
- (CGSize)sizeWithText:(NSString *)text font:(UIFont *)font maxSize:(CGSize)maxSize
{
NSDictionary *attributes = @{NSFontAttributeName :font};
return [text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil].size;
}