关于ios 下动态计算文本内容的高度,经过查阅和网上搜素,现在看到的有以下几种方法:

1、

//  获取字符串的大小  ios6

- (CGSize)getStringRect_:(NSString*)aString {

CGSize size;

UIFont *nameFont=[UIFont fontWithName:@"Helvetica" size:13];

size=[aString sizeWithFont:nameFont constrainedToSize:CGSizeMake(237, 200) lineBreakMode:NSLineBreakByCharWrapping];

return  size;

}

//  获取字符串的大小  ios7

- (float)heightForString:(NSString *)value andWidth:(float)width withFontSize:(CGFloat)fontSize{

//获取当前文本的属性

NSAttributedString *attrStr = [[NSAttributedString alloc] initWithString:value];

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

// 获取该段attributedString的属性字典

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

// 计算文本的大小

CGSize sizeToFit = [value boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX) // 用于计算文本绘制时占据的矩形块

options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading // 文本绘制时的附加选项

attributes:dic        // 文字的属性

context:nil

].size; // context上下文。包括一些信息,例如如何调整字间距以及缩放。该对象包含的信息将用于文本绘制。该参数可为nil

return sizeToFit.height;

}

以上方法还是依靠CGSizeMake(237,200) 中的200来设置 label 的高度的,而且无论在有效宽度范围内形成多少行,计算出来的 label 的高度只是一行的高度。

下面的方法依然如此:

- (CGSize)boundingRectWithSize:(CGSize)size
{     NSDictionary *attribute = @{NSFontAttributeName: self.font};     CGSize retSize = [self.text boundingRectWithSize:size                                              options:\                                                      NSStringDrawingTruncatesLastVisibleLine |                                                      NSStringDrawingUsesLineFragmentOrigin |NSStringDrawingUsesFontLeading                                           attributes:attribute                                              context:nil                      ].size;      return retSize; }

以下代码供你测试:

  // 字符串NSString *str = @"日落时分,沏上一杯山茶,听一曲意境空远的《禅》,心神随此天籁,沉溺于玄妙的幻境里。仿佛我就是那穿梭于葳蕤山林中的一只飞鸟,时而盘旋穿梭,时而引吭高歌;仿佛我就是那潺潺流泻于山涧的一汪清泉,涟漪轻盈,浩淼长流;仿佛我就是那竦峙在天地间的一座山峦,伟岸高耸,从容绵延。我不相信佛,只是喜欢玄冥空灵的梵音经贝,与慈悲淡然的佛境禅心,在清欢中,从容幽静,自在安然。一直向往走进青的山,碧的水,体悟山水的绚丽多姿,领略草木的兴衰荣枯,倾听黄天厚土之声,探寻宇宙自然的妙趣。走进了山水,也就走出了喧嚣,给身心以清凉,给精神以沉淀,给灵魂以升华。";// 初始化labelUILabel *label = [UILabel new];label.backgroundColor = [UIColor whiteColor];[self.view addSubview:label];// label获取字符串label.text = str;// label获取字体label.font = [UIFont fontWithName:nil size:18];// 根据获取到的字符串以及字体计算label需要的sizeCGSize size = [label boundingRectWithSize:CGSizeMake(320, 0)];// 设置无限换行label.numberOfLines = 0;// 设置label的framelabel.frame = CGRectMake(0.0f, 50.0f, size.width, size.height);
 

最后,仔细研究,sizeWithFont 这个方法貌似确实是针对UILabel的,如果用UILabel来显示,其计算出来的高度和实际高度是吻合的。但是需要注意的是UILabel的文字内容和UILabel的宽度几乎是重合的,这会让人觉得文字太过于帖边了,可以考虑设置其 contentInset之类来处理,不过这个是另一个问题了。而 UITextView 则不会太帖边,且行间距较大,适合显示。所以使用如下方法即可解决:

//声明、定义方法:

- (float)heightForString:(NSString *)value andWidth:(float)width withFontSize:(CGFloat)fontSize{

// 使用UITextView 的 sizeThatFits 方法计算出字符串的高度后再给 UILabel 使用

UITextView *detailTextView = [[UITextView alloc]initWithFrame:CGRectMake(0, 0, width, 0)];

detailTextView.font = [UIFont systemFontOfSize:fontSize];

detailTextView.text = value;

CGSize deSize = [detailTextView sizeThatFits:CGSizeMake(width,CGFLOAT_MAX)];

return deSize.height;

}

//使用计算:

// 字符串NSString *conText = @"日落时分,沏上一杯山茶,听一曲意境空远的《禅》,心神随此天籁,沉溺于玄妙的幻境里。仿佛我就是那穿梭于葳蕤山林中的一只飞鸟,时而盘旋穿梭,时而引吭高歌;仿佛我就是那潺潺流泻于山涧的一汪清泉,涟漪轻盈,浩淼长流;仿佛我就是那竦峙在天地间的一座山峦,伟岸高耸,从容绵延。我不相信佛,只是喜欢玄冥空灵的梵音经贝,与慈悲淡然的佛境禅心,在清欢中,从容幽静,自在安然。一直向往走进青的山,碧的水,体悟山水的绚丽多姿,领略草木的兴衰荣枯,倾听黄天厚土之声,探寻宇宙自然的妙趣。走进了山水,也就走出了喧嚣,给身心以清凉,给精神以沉淀,给灵魂以升华。";

CGFloat conH = [self heightForString:conText andWidth:200 withFontSize:14];

UILabel *contentLabel = [[UILabel alloc]init];

contentLabel.textAlignment = NSTextAlignmentCenter;

contentLabel.text = conText;

contentLabel.numberOfLines = 0;

[contentLabel setFrame:CGRectMake(0, 0, 200, conH)];

[self.view addSubView:contentLabel];

转载于:https://www.cnblogs.com/AntonyGu/p/5377835.html

iOS 动态计算文本内容的高度相关推荐

  1. php 动态修改文本内容_九大编程语言优缺点第八期:PHP

    上一期给大家带来了C#介绍,渐渐的这一话题已经接近尾声了,只剩下最后这两篇了,现在要给大家介绍:PHP以及Objective-C,对于这几种语言,大家都能看到由其打造的顶尖应用,我们继续来了解一下吧. ...

  2. ios 动态监听键盘输入法和高度

    //监听键盘高度变化 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasChan ...

  3. 设置代码ios中根据文本设置label高度设置代码

    本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~ UILabel * label = [[UILabel alloc] init]; NSString * text = @&q ...

  4. 动态计算未知盒子的高度

    height: calc(100% - 75rpx - 1rpx); 转载于:https://www.cnblogs.com/Glant/p/11096595.html

  5. 设置UILabel可变高度(根据文本内容自动适应高度)

    @property(nonatomic)UILabel *showLabel;  // 计算文本所占高度,计算出来之后设置label的高度 // 第一个参数:字体大小,字体大小/样式影响计算字体的高度 ...

  6. Java实现标题相似度计算,文本内容相似度匹配,Java通过SimHash计算标题文本内容相似度

     目录 一.前言 二.关于SimHash 补充知识 一).什么是海明距离 二).海明距离的应用 三).什么是编辑距离 三.SimHash算法的几何意义和原理 一).SimHash算法的几何意义 二). ...

  7. js设置和获取html和文本,JS---DOM---设置和获取---标签内容和文本内容

    设置和获取---标签内容和文本内容 总结---设置: 使用innerText主要是设置文本的, 设置标签内容, 是没有标签的效果的 innerHTML是可以设置文本内容 innerHTML主要的作用是 ...

  8. 获取svg内text文本元素的高度、宽度及坐标等信息

    之前有一篇文章介绍了如何获取svg元素的高度.宽度等信息,传送门:https://blog.csdn.net/lqlqlq007/article/details/81875996 但是svg内的tex ...

  9. Android 动态计算ListView的高度

    目录 一.简介 二.效果图 三.代码实现 一.简介 在Android开发的过程中有的时候我们需要手动计算ListView的高度,比如说,ScrollView中嵌套ListView的时候,我们就需要手动 ...

最新文章

  1. 实现Date函数属性中的format方法
  2. 近期必读的9篇CVPR 2019【域自适应(Domain Adaptation)】相关论文和代码
  3. Posix多线程编程—线程属性
  4. python中用str乘方_Python基础知识
  5. 《LeetcodeHot100非困难题补录》
  6. 如何导入maven源文件_如何正确导入maven项目到eclipse?
  7. .net 开发 html框架,Asp.net的开发框架
  8. SQL过滤字符后手工注入漏洞测试(第1题)
  9. python中列表的常用操作
  10. 为什么阿里Java规约要求谨慎使用SimpleDateFormat
  11. 论一切都是文件之匿名 inode
  12. GCPC 2018 – Problem D: Down the Pyramid
  13. 14. 使用reserve避免不必要的内存分配
  14. Word中删除空白页的4种方法
  15. 【jzoj2173】【DFS】无根树
  16. ##Mysql数据库DQL查询工具的使用
  17. JAVA实现生成原生二维码并上传至阿里云
  18. cpe(通用平台枚举)命名规范及python CPE库实战
  19. Android安卓麻将识别源码Demo( 三)
  20. VUE教程(持续更新中)

热门文章

  1. [题解]bzoj3884 上帝与集合的正确用法
  2. Diffblue Cover AI Java:Difflane如何利用Diffblue Cover AI实现Java自动化的单元测试(Diffblue Cover快速入门)
  3. postgresql分割字符串_postgresql 实现字符串分割字段转列表查询_PostgreSQL_数据库
  4. 用ps做一个简单的二维码扫描动画
  5. AndroidStudio下载--持续更新-支持多种网盘--多版本
  6. pdf.js如何默认显示指定页码
  7. 阿里月报目录 方便查询
  8. python练习 15-9
  9. .NET实现RSA算法的加密解密
  10. python全局变量操作详解_Python全局变量是什么?Python全局变量怎么使用?