小白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;
}
^_^……复制粘贴的朋友请💗一下~
网友评论