.h文件

#import <UIKit/UIKit.h>

@interface UILabel (ContentSize)

- (CGSize)contentSize;

@end

.m文件

#import "UILabel+ContentSize.h"

@implementation UILabel (ContentSize)

- (CGSize)contentSize {
NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineBreakMode = self.lineBreakMode;
paragraphStyle.alignment = self.textAlignment; NSDictionary * attributes = @{NSFontAttributeName : self.font,
NSParagraphStyleAttributeName : paragraphStyle}; CGSize contentSize = [self.text boundingRectWithSize:CGSizeMake(self.frame.size.width, MAXFLOAT)
options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
attributes:attributes
context:nil].size;
return contentSize;
}
@end

这个类是在别人的基础上改动的

以下是详细的实现:

 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 20, 280, 20)];
label.font = [UIFont boldSystemFontOfSize:15.0f]; //UILabel的字体大小
label.numberOfLines = 0; //必须定义这个属性,否则UILabel不会换行
label.textColor = [UIColor whiteColor];
label.textAlignment = NSTextAlignmentLeft; //文本对齐方式
[label setBackgroundColor:[UIColor redColor]];
label.lineBreakMode = NSLineBreakByWordWrapping; NSLog(@"%d",label.lineBreakMode);
//宽度不变,依据字的多少计算label的高度
NSString *str = @"伴随着张震岳的这首老歌,仿佛我又回到了过去,回到了大学即将分别的日子,带着不舍与迷惘和他们说再见。又是一年毕业季,看着朋友圈各种晒毕业照,毕业旅行照,学士帽漫天的飞舞。各种送别活动在鲜花和掌声中慢慢退去色彩,心里不时充满着各种思念。离开校园整整一年了,每当和别人谈起母校各种自豪,大学生活各种多彩。人生经历各种丰富,事实上内心还是留有种种遗憾;四年的蹉跎时光,有人收获了知识。有人收获了人生阅历,还有人收获了爱情,而我收获的仅仅有那清纯的友谊,兄弟情。 分别整整一年了,还记得那时我们都是多么的不舍,同学情,兄弟情,混合着酒精流到心里,一米八几的大男孩哭的稀里哗啦,拥抱着说再见;之后的我们离开了熟悉的校园,奔赴在各个工作岗位。去体现自己的价值,为生活而忙碌着;一转身。有些人真的就再也不见。 毕业一周年,你们还好吗?工作还顺利吗?学习还顺心吗?一切都回不了头,仅仅能在心里默默地想着你们,希望你们安好。 。。";
// CGSize size = [str sizeWithFont:label.font constrainedToSize:CGSizeMake(label.frame.size.width, MAXFLOAT) lineBreakMode:NSLineBreakByWordWrapping];
// //依据计算结果又一次设置UILabel的尺寸
// [label setFrame:CGRectMake(20, 10, 280, size.height)];
// label.text = str;
label.text = str; [label setFrame: CGRectMake(20, 20, 280, [label contentSize].height)]; [self.view addSubview:label];

上面的凝视部分是老的方法。

这里要注意几点:

1、我在调用contentSize前设置下label.lineBreakMode属性。

2、文字究竟换不换行的关键是设置CGSizeMake(w,h),差别主要在w,h的值改动。

Demo地址



最新文章

  1. UNITY更新到5后设置的动画无法播放了怎么办
  2. 解析大型.NET ERP系统 窗体、查询、报表二次开发
  3. 学号160809224姓名黄家帅c语言程序设计实验2 选择结构程序设计
  4. ALITUM DESIGNER 多PIN脚IC元件封装的制作
  5. Particle Editor 无法启动此程序,因为计算机中丢失MSCP110.dll。尝试重新安装该程序以解决此问题。
  6. uva 10718 Bit Mask (位运算)
  7. Java值创建线程的两种方式对比
  8. 17.1.1.8?Setting Up Replication with Existing Data设置复制使用存在的数据
  9. mysql主从复制-异步复制
  10. Multimodal —— 看图说话(Image Caption)任务的论文笔记(一)评价指标和NIC模型
  11. Swagger文档添加file上传参数写法
  12. Request processing failed; nested exception is java.lang.IllegalArgumentException: No converter found for return value of type: class cn.e3mall.pojo.TbItem
  13. bzoj3224Tyvj 1728 普通平衡树 treap
  14. ML.NET 示例:推荐之矩阵分解
  15. 异步fifo的Verilog实现
  16. Pinpoint是一个开源的 APM (Application Performance Management/应用性能管理)工具,用于基于java的大规模分布式系统,基于Google Dapper论文
  17. 记一次给nginx的web服务器目录加软链接
  18. hdu4614 Vases and Flowers【线段树】【二分】
  19. HTML 和 JavaScript 编写简单的 404 界面
  20. 织梦开启PHP 标签

热门文章

  1. java_基础知识_字符串练习题_计算两个字符串的最长公共字串长度
  2. 删除ListView item数据 页面不刷新
  3. Lazarus 1.44升级到1.6 UTF8处理发生变化了
  4. 常见Android安装启动失败问题
  5. C# 打开模态对话框 和打开文件夹
  6. requirejs(模块化)
  7. 10.3 io流 正篇 FileReader FileWriter读写代码
  8. Eclipse调试DEBUG时快速查看某个变量的值的快捷键
  9. snprintf不能使用&quot;字符串指针&quot;赋值,可以使用字符数组
  10. LDAP个人理解