直接封装成类别,只要是UILabel都可以实现在自适应宽高的同时调整文字的行高。具体的实现代码如下:
- 创建类别,将其命名为Adaptive
- .h文件的方法接口
#import <UIKit/UIKit.h>
@interface UILabel (Adaptive)
/**
* 自适应宽高同时调整行距
*
* @param text label.text
* @param font label.font
* @param size label的最大尺寸
*
* @return 自适应后的到的size
*/
- (CGSize )szieAdaptiveWithText:(NSString *)text andTextFont:(UIFont *)font andTextMaxSzie:(CGSize )size;
@end
- .m文件中方法的实现
#import "UILabel+Adaptive.h"
@implementation UILabel (Adaptive)
- (CGSize )szieAdaptiveWithText:(NSString *)text andTextFont:(UIFont *)font andTextMaxSzie:(CGSize )size{
self.text = text;
self.font = font;
//可变的属性文本
NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc]initWithString:self.text];
//设置段落样式 使用NSMutableParagraphStyle类
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.alignment = NSTextAlignmentLeft;//文本对齐方式
paragraphStyle.maximumLineHeight = 60; //最大的行高
paragraphStyle.lineSpacing = 8; //行自定义行高度
// 给可变的属性字符串 添加段落格式
[attributedText addAttribute: NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [self.text length])];
//将带有段落格式的可变的属性字符串给label.attributedText
self.attributedText = attributedText;
self.lineBreakMode = NSLineBreakByTruncatingTail;//label的换行模式
self.numberOfLines = 0;// 设置行数,0表示没有限制
CGSize maxSzie = size;//设置label的最大SIZE
[self sizeToFit];
CGSize labelSize = [self sizeThatFits:maxSzie];//最终自适应得到的label的尺寸。
return labelSize;
}
注:
这里的实现,行距设置是固定的值,如果想不同的label设置不同的行距的话,可以在方法中在添加一个行距的参数就OK了。
这里只是对行距进行设置,没有设置其他的段落属性,有兴趣的童鞋可以试试其他的属性。