关于UILabel高度自适应


最新适应方式

float dev=[[[UIDevice currentDevice]systemVersion]floatValue];
    if (dev>=7.0) {
        NSDictionary *dict=@{
                             NSFontAttributeName: [UIFont systemFontOfSize:Size]
                             };
        
        CGRect frame=[textStr boundingRectWithSize:CGSizeMake(width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading|NSStringDrawingTruncatesLastVisibleLine attributes:dict context:nil];
        return frame.size.height;
        
    }else{
        CGSize size=[textStr sizeWithFont:[UIFont systemFontOfSize:Size] constrainedToSize:CGSizeMake(width, CGFLOAT_MAX) lineBreakMode:NSLineBreakByCharWrapping];
        return size.height;
    }






前面已经描述了关于UILabel自适应的要点。其中

- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakModeNS_DEPRECATED_IOS(2_0,7_0, "Use -boundingRectWithSize:options:attributes:context:"); 方法在7.0以后已经不建议使用了。

代替方法是:

- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context NS_AVAILABLE_IOS(7_0);

    //第一参数size宽高限制,用于计算文本绘制时占据的矩形块。其中高度根据需要而定。

   //第二参数Option文本绘制时的附加选项。

   //第三参数attributes为文字属性字典

   //第四参数context 例如如何调整字间距以及缩放

   //返回一个矩形,大小等于文本绘制完将占据的宽和高。

code:

//自定义一个方法 返回CGSize类型  

- (CGSize)repectHeight:(NSString *)sender

{

   //NSAttributedString是一个带有属性的字符串,通过该类可以灵活地操作和呈现多种样式的文字数据。

   NSAttributedString *attri = [[NSAttributedStringalloc]initWithString:sender];

   //计算长度

    NSRange range = NSMakeRange(0, attri.length);

   //获得文字属性字典

   NSDictionary *dic = [attriattributesAtIndex:0effectiveRange:&range];

   //计算所需的高度

  //300为UILabel的宽度,5000是预设的一个高度,表示在这个范围内

   CGSize size = [senderboundingRectWithSize:CGSizeMake(300,5000)   options:NSStringDrawingUsesLineFragmentOriginattributes:diccontext:nil].size;// 用于计算文本绘制时占据的矩形块

    return size;//返回size  注意这里计算出得仅仅是UILabel所需要高度,如果在Cell里  必须加上其他控件的高度

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值