UILabel--自适应、根据文字计算高宽、NSMutableAttributedString、NSMutableParagraphStyle

小白IOS进阶之路


UILabel根据文字计算frame宽高的三种方法:

1.系统自带方法(推荐)

/************************************************************

函数名称 : +(CGSize)labelSizeWithLabel:(UILabel *)label limitSize:(CGSize)size

函数描述 : 计算UILabel的高宽

输入参数 : label--当前控件、size--大小限制

返回参数 : CGSize--返回的size

备注信息 : 即使设置了NSAttributedString也一样适用,实际计算出的高度会超出此限制

**********************************************************/

+(CGSize)labelSizeWithLabel:(UILabel *)label limitSize:(CGSize)size

{

return [label sizeThatFits:size];

}


2.内容为NSAttributedString时使用

/************************************************************

函数名称 : -(CGSize)labelSizeWithAttributeStr:(NSAttributedString *)str limitSize:(CGSize)size

函数描述 : 计算UILabel的高宽

输入参数 : str--当前控件属性文字、size--大小限制

返回参数 : CGSize--返回的size

备注信息 : 注意在NSMutableParagraphStyle中不能设置其lineBreakMode属性,否则只能计算出其中一行的高度。

**********************************************************/

-(CGSize)labelSizeWithAttributeStr:(NSAttributedString *)str limitSize:(CGSize)size

{

CGSize lastSize= [str boundingRectWithSize:size options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading|NSStringDrawingTruncatesLastVisibleLine) context:nil].size;

return lastSize;

}

3.计算NSString及其附加属性的高度

/************************************************************

函数名称 : -(CGSize)labelSizeWithStr:(NSString *)str font:(UIFont *)font limitSize:(CGSize)size

函数描述 : 计算UILabel的高宽

输入参数 : str--当前控件文字、font--字体、size--大小限制

返回参数 : CGSize--返回的size

备注信息 : 注意此处不能设置lineBreakMode,一旦设置,则只能算出一行的高度

**********************************************************/

-(CGSize)labelSizeWithStr:(NSString *)str font:(UIFont *)font limitSize:(CGSize)size

{

NSMutableParagraphStyle *paragraphStyle= [[NSMutableParagraphStyle alloc]init];

paragraphStyle.lineSpacing=12;

NSDictionary *attrDic= @{NSFontAttributeName:font,NSParagraphStyleAttributeName:paragraphStyle};

CGSize lastSize= [str boundingRectWithSize:size options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingTruncatesLastVisibleLine) attributes:attrDic context:nil].size;

return lastSize;

}

^_^……复制粘贴的朋友请💗一下~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容