文档章节

UILabel自动计算行高 并且 最多显示n行

冰泪_
 冰泪_
发布于 2016/05/17 15:12
字数 446
阅读 2754
收藏 23

该段代码作用(iOS开发)

1、根据文本动态计算label需要的高度

2、可以添加最多显示多少行 

      例如:在论坛回复里边有“点击查看全文功能” 默认的最多只显示3行  点击查看全文时候 >显示全文   此类的 情况下 可以使用    

     此段代码算是动态计算label高度的升级版吧

//创建label
    NSString * labelStr = @"你好,这是UILabel的例如:在论坛回复里边有“点击查看全文功能” 默认的最多只显示3行  点击查看全文时候 >显示全文   此类的 情况下 可以使用  ";
    UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 160, 200, 14)];
    label.font = [UIFont systemFontOfSize:11];
    label.backgroundColor = [UIColor orangeColor];
    label.text = labelStr;
    label.numberOfLines = 0;
    [self.view addSubview:label];

[self dynamicCalculationLabelHight:label];

------------  分割线  ------------------

- (void)dynamicCalculationLabelHight:(UILabel*) label{
    //有源码在 有需求自行微调即可
    NSInteger n = 6;//最多显示的行数
    CGSize labelSize = {0, 0};
    
    labelSize = [self  ZFYtextHeightFromTextString:label.text width:label.frame.size.width fontSize:label.font.pointSize];
    
   // NSLog(@"%f",label.font.pointSize);//获取 label的字体大小
    //NSLog(@"%f",label.font.lineHeight);//获取label的在不同字体下的时候所需要的行高
    //NSLog(@"%f",labelSize.height);//label计算行高

    CGFloat rate = label.font.lineHeight; //每一行需要的高度

    CGRect frame= label.frame;
    if (labelSize.height>rate*n) {
        frame.size.height = rate*n;
    }else{
        frame.size.height = labelSize.height;
    }
    label.frame = frame;
}

 

    //计算 label需要的宽度和高度方法

-(CGSize)ZFYtextHeightFromTextString:(NSString *)text width:(CGFloat)textWidth fontSize:(CGFloat)size{
    //计算 label需要的宽度和高度
    NSDictionary *dict = @{NSFontAttributeName:[UIFont systemFontOfSize:size]};
    CGRect rect = [text boundingRectWithSize:CGSizeMake(textWidth, MAXFLOAT) options:NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesFontLeading|NSStringDrawingUsesLineFragmentOrigin attributes:dict context:nil];
    
     CGSize size1 = [text sizeWithAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:size]}];
    
    return CGSizeMake(size1.width, rect.size.height);
}

转载请注明出处http://my.oschina.net/u/2523541/blog/676724

如果感觉写的不错麻烦关注一下

对以上代码有疑问可以留言告诉我

 

© 著作权归作者所有

共有 人打赏支持
冰泪_
粉丝 15
博文 81
码字总数 52550
作品 0
青浦
程序员
私信 提问
加载中

评论(9)

杨志强
杨志强
额 这个算升级么?单纯计算frame啊……用的接口也是旧的啊……
冰泪_
冰泪_

引用来自“卖茄子”的评论

为什么不直接封装成控件。。

项目中使用到了就随手写了下 几行代码的事 也就懒得封装了
卖茄子
卖茄子
为什么不直接封装成控件。。
冰泪_
冰泪_

引用来自“Axel_”的评论

怎么还在首页推荐

这个不是很清楚 这个的机制
iiiiiiiii
iiiiiiiii
怎么还在首页推荐
冰泪_
冰泪_

引用来自“宇林木风”的评论

干啥用也不说明下,整理下格式吧,毕竟被置顶了~
好的 我整理下
冰泪_
冰泪_

引用来自“慢慢成长”的评论

代码没高亮1
我看看怎么高亮
宇林木风
干啥用也不说明下,整理下格式吧,毕竟被置顶了~
慢慢成长
慢慢成长
代码没高亮1
UILabel自适应高度和自动换行- OC swift

加粗; [UILabel setFont:[UIFont fontWithName:@"Helvetica-Bold" size:20]]; 加粗并且倾斜 [UILabel setFont:[UIFont fontWithName:@"Helvetica-BoldOblique" size:20]]; guessLikeLabel.f......

夕阳_jhe
2015/08/17
0
0
用UITextView撸一个顺畅的评论输入框

对比UITextField 继承关系: UITextField继承自UIControl,UITextView继承自UIScrollView; 输入行数 UITextView支持多行输入,可以滑屏垂直滚动,UITextField仅支持单行输入 Placeholder UI...

STzen
05/10
0
0
UILabel autolayout自动换行 版本区别

今天解决了一个与UILabel相关的Bug。 表现为在iOS7以上的系统中,UILabel能够自动换行,多行显示的字符串,而在iOS6上面则不会自动换行,直接打省略号。 正常情况下,numberOfLines设置为0,U...

Aimy
2014/12/04
0
0
UI_11 自定义UITableViewCell、Cell的高度自适应

UITableViewCell很难满足我们的需求,因此,CustomCell(自定义单元格)至关重要。下面将通过一个例子演示自定义Cell。第二部分演示根据文本内容自适应Label、Cell高度。 第一部分 CustomCe...

黑伞将军
2015/08/29
0
0
UIImageView与UIButton

应用场合 UIImageView主要用在只显示图片,没有点击事件的情况并且处理图片更加专业,动画例子: NSMutableArray *images = [NSMutableArray array]; for (int i=0; i<sum; i++) { NSBundle ...

天边那束阳光
2014/10/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

颜色模型与颜色应用---光的特性

电磁频谱 颜色的心理学特征

中国龙-扬科
30分钟前
2
0
android音频及强噪相关

Android AudioRecord和AudioTrack介绍(Android音频收集和播放 麦克风降噪) https://blog.csdn.net/tanningzhong/article/details/72844559 音频采集(AudioRecorder) https://www.jianshu.......

whoisliang
36分钟前
2
0
redis-持久化

RDB rdb持久化是把当前进程数据生成快照保存到磁盘的过程。触发RDB持久化过程分为手动触发和自动触发。 触发机制 bgsave执行流程 rdb优缺点 AOF 记录每次写命令,重启时再重新执行aof文件中的...

grace_233
41分钟前
3
0
电话激活Windows 中文操作系统步骤

已购买微软MAK批量授权,系统又在企业内网中,无法通过连接Internet进行激活,还可以通过电话完成激活。 前期准备 请提前准备好产品密钥,Product Key格式如下:XXXXX-XXXXX-XXXXX-XXXXX-XXX...

tonyfox
43分钟前
4
0
Apache用户认证,域名跳转,访问日志

Apache用户认证 当设置了用户认证后,用户访问网站时,需要输入用户名和密码才能访问。 可以全局设置,也可以为某几个虚拟主机单独配置。 下面以全局配置进行操作示例。 编辑httpd.conf进行配...

野雪球
47分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部