动态计算label 高度

一、动态计算label高度 (忽略请看二、三)

- (CGFloat)updateCellContentFrame{

    CGRect myRect = [self boundingRectWithInitSize:_contentLabel.frame.size label:_contentLabel];

    _contentLabel.frame = CGRectMake(0, 30, kScreenWidth, myRect.size.height);

    _timeLabel.frame = CGRectMake(0, myRect.size.height+30, kScreenWidth, 30);

    return myRect.size.height + 30*2;

}

// 动态 计算label  的大小

-(CGRect)boundingRectWithInitSize:(CGSize)size label:(UILabel *)label{

 label.lineBreakMode=NSLineBreakByWordWrapping;

  CGRect rect=[label.text boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObjectsAndKeys:label.font,NSFontAttributeName, nil] context:nil];

 return rect;

}

二、设置label的行间距,字间距 (推荐使用,相比三)

- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.title = @"首页";

// 创建label
CGRect labRec = CGRectMake(0, 100, kScreenWidth, 0);
UILabel *label = [[UILabel alloc] initWithFrame:labRec];
label.numberOfLines = 0;
label.backgroundColor = [UIColor redColor];
//初始化NSMutableParagraphStyle
NSString *string = @"引子:有的时候,当你用UILable加载一段话的时候,由于那些字可能会很多,系统的布局之后的字间距会很挤,但是,UI设计会要求你,,把字于字的间距调大一些,这时候就要程序猿敲代码改变字体的间距。接下来就给出实现这种效果的代码。另";
NSMutableParagraphStyle *paraStyle = [[NSMutableParagraphStyle alloc] init];
//行间距
paraStyle.lineSpacing = 0;
//字间距
UIFont *fount = label.font;
NSDictionary *titSpaceDic = @{NSFontAttributeName:fount,
NSParagraphStyleAttributeName:paraStyle,
NSKernAttributeName:@0.0f};

NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] initWithString:string attributes:titSpaceDic];

label.attributedText = attString;
[label sizeToFit];
[self.view addSubview:label];

NSLog(@"\n%@",[NSValue valueWithCGRect:label.frame]);
NSLog(@"\n%@",NSStringFromCGRect(label.frame));
CFShow((__bridge CFTypeRef)(NSStringFromCGRect(label.frame)));

}

三、 通过系统方法设置 (会有问题,文字不能完全显示)

- (CGRect)boundingRectWithSize: options: attributes: context:

- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.title = @"申办管理";

CGRect labRec = CGRectMake(0, 0, kScreenWidth, 0);
UILabel *label = [[UILabel alloc] init];
label.numberOfLines = 0;
label.backgroundColor = [UIColor redColor];
label.text = @"引子:有的时候,当你用UILable加载一段话的时候,由于那些字可能会很多,系统的布局之后的字间距会很挤,但是,UI设计会要求你,,把字于字的间距调大一些,这时候就要程序猿敲代码改变字体的间距。接下来就给出实现这种效果的代码。另";
[self.view addSubview:label];
CGRect labFrame =[self boundingRectWithInitSize:labRec.size label:label];
label.frame = labFrame;
CFShow((__bridge CFTypeRef)NSStringFromCGRect(labFrame));

}

// 动态 计算label 的大小
-(CGRect)boundingRectWithInitSize:(CGSize)size label:(UILabel *)label{

label.lineBreakMode=NSLineBreakByWordWrapping;
CGRect rect=[label.text boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObjectsAndKeys:label.font,NSFontAttributeName, nil] context:nil];
CFShow((__bridge CFTypeRef)NSStringFromCGRect(rect));
// rintf 四舍五入
return CGRectMake(0, 100, rect.size.width, rintf(rect.size.height));


}

转载于:https://www.cnblogs.com/tom2015010203/p/5482458.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值