直接封裝成類別,只要是UILabel都可以實(shí)現(xiàn)在自適應(yīng)寬高的同時(shí)調(diào)整文字的行高。具體的實(shí)現(xiàn)代碼如下:
- 創(chuàng)建類別,將其命名為Adaptive
- .h文件的方法接口
#import <UIKit/UIKit.h>
@interface UILabel (Adaptive)
/**
* 自適應(yīng)寬高同時(shí)調(diào)整行距
*
* @param text label.text
* @param font label.font
* @param size label的最大尺寸
*
* @return 自適應(yīng)后的到的size
*/
- (CGSize )szieAdaptiveWithText:(NSString *)text andTextFont:(UIFont *)font andTextMaxSzie:(CGSize )size;
@end
- .m文件中方法的實(shí)現(xiàn)
#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];
//設(shè)置段落樣式 使用NSMutableParagraphStyle類
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.alignment = NSTextAlignmentLeft;//文本對(duì)齊方式
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;// 設(shè)置行數(shù),0表示沒(méi)有限制
CGSize maxSzie = size;//設(shè)置label的最大SIZE
[self sizeToFit];
CGSize labelSize = [self sizeThatFits:maxSzie];//最終自適應(yīng)得到的label的尺寸。
return labelSize;
}
注:
這里的實(shí)現(xiàn),行距設(shè)置是固定的值,如果想不同的label設(shè)置不同的行距的話,可以在方法中在添加一個(gè)行距的參數(shù)就OK了。
這里只是對(duì)行距進(jìn)行設(shè)置,沒(méi)有設(shè)置其他的段落屬性,有興趣的童鞋可以試試其他的屬性。