ios label计算高度

 #define labelW 300//label的固定宽度
 #define fontSize 20//字体大小
 #define lingSpace 5//行间距
- (void)viewDidLoad{
 [superviewDidLoad];  self.view.backgroundColor=RGBColor(230,230,230);  NSString*text =@"风也是秋天.";
//就用这两个options枚举参数
NSStringDrawingOptionsoptions= NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading;
  // labelW是段落的固定宽度;CGFLOAT_MAX固定用这个;attributes按照下面的语句fontSize是字体的大小  
  // >IOS7
     CGFloatlabelH= [text boundingRectWithSize:CGSizeMake(labelW,CGFLOAT_MAX)options:optionsattributes:@{NSFontAttributeName:[UIFontsystemFontOfSize:fontSize]}context:nil].size.height;
 //
    //CGFloat labelH = [textsizeWithFont:[UIFont systemFontOfSize:fontSize]constrainedToSize:CGSizeMake(labelW,CGFLOAT_MAX)].height;  
   //打印计算的高度看一下
     NSLog(@"文字段落高度为:%f",labelH);
      //实际行数  
     NSIntegerlineNum = labelH/fontSize;

     NSMutableParagraphStyle*paragraphStyle= [[ NSMutableParagraphStyle alloc]init];  
     //文字对齐方式  
     paragraphStyle.alignment=NSTextAlignmentJustified;
    //段落首字符缩进两个字
     paragraphStyle.firstLineHeadIndent=2*fontSize;
     //每行行首缩进
     paragraphStyle.headIndent=10;
     //行间距
     paragraphStyle.lineSpacing=lingSpace;
     //属性字典,包括前景字体颜色和段落属性
     NSDictionary*attributes= @{NSForegroundColorAttributeName:[UIColorredColor],NSParagraphStyleAttributeName:paragraphStyle};
     //属性字符串
     NSAttributedString*attributedText= [[ NSAttributedString alloc ]initWithString :text attributes :attributes];
    UILabel*label1 = [[UILabelalloc]initWithFrame:CGRectMake(0,70,300,labelH+lineNum*lingSpace)];
     //文字行数设置为0
   label1.numberOfLines=0;
   // label背景色
    label1.backgroundColor=[UIColor greenColor];
     label1.attributedText= attributedText;
     //显示label
   [self.viewaddSubview:label1];
}

三. 一般情况下工程里直接把上面两种情况封装在NSString类的拓展里面,方便用简单参数直接调用:

#import"NSString+Extension.h"
 @implementationNSString (Extension)
 #pragma clang diagnosticpush
 #pragma clang diagnostic ignored"-Wdeprecated-declarations"
 - (CGSize)sizeWithFont:(UIFont*)font maxW:(CGFloat)maxW
 {
    NSMutableDictionary*attrs= [NSMutableDictionary dictionary];
   attrs[NSFontAttributeName]= font;  
    CGSizemaxSize = CGSizeMake(maxW,MAXFLOAT);  
    //获得系统版本
    if(iOS7){
 NSStringDrawingOptionsoptions= NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading;
      return[selfboundingRectWithSize:maxSizeoptions:optionsattributes:attrscontext:nil].size;  
    } else{
       return[selfsizeWithFont:fontconstrainedToSize:maxSize];
   }
 }
- (CGSize)sizeWithFont:(UIFont*)font
{
   return[selfsizeWithFont:fontmaxW:MAXFLOAT];  
 }

另一种方法
顺序不能变 MAX是ios自带的 宏定义

 _desLabel.height = MAX(_desLabel.height, 50);
 [_desLabel sizeToFit];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值