美文网首页UI布局iOS技术专题iOS 开发每天分享优质文章
根据label正文内容动态计算正文的高度

根据label正文内容动态计算正文的高度

作者: 蒲公英少年 | 来源:发表于2016-04-13 11:29 被阅读1425次

    在iOS开发中,有很多地方用到了label的高度自适应,即根据label中text的内容、宽度、以及字体等条件来动态计算label的高度,实现代码如下:

                /*根据传过来的文字内容、字体大小、宽度和最大尺寸动态计算文字所占用的size
                  * text 文本内容 
                  * fontSize 字体大小
                  * maxSize  size(宽度,1000)
                  * return  size (计算的size)
                  */
        - (CGSize)labelAutoCalculateRectWith:(NSString*)text FontSize:(CGFloat)fontSize MaxSize:(CGSize)maxSize
        {
            NSMutableParagraphStyle* paragraphStyle = [[NSMutableParagraphStyle alloc]init];
           paragraphStyle.lineBreakMode=NSLineBreakByWordWrapping;
            NSDictionary* attributes =@{NSFontAttributeName:[UIFont systemFontOfSize:fontSize],NSParagraphStyleAttributeName:paragraphStyle.copy};
            CGSize labelSize;
            
            //如果是IOS6.0
            if (![text respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)]){
                labelSize = [text sizeWithFont:[UIFont systemFontOfSize:fontSize] constrainedToSize:maxSize lineBreakMode:NSLineBreakByWordWrapping];
            }
            //如果系统为iOS7.0
            else
          {
                // iOS7中用以下方法替代过时的iOS6中的sizeWithFont:constrainedToSize:lineBreakMode:方法
                labelSize = [text boundingRectWithSize: maxSize
                                               options: NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading|NSStringDrawingTruncatesLastVisibleLine
                                            attributes:attributes
                                               context:nil].size;
            }
            labelSize.height=ceil(labelSize.height);    
            labelSize.width=ceil(labelSize.width);
            return labelSize;
        }

    相关文章

      网友评论

      • 鼻毛长长:sizeToFit
        numberOfLines = 0
        应该也可以做到吧

      本文标题:根据label正文内容动态计算正文的高度

      本文链接:https://www.haomeiwen.com/subject/iziwlttx.html