博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iPhone:动态获取UILabel的高度和宽度
阅读量:5165 次
发布时间:2019-06-13

本文共 2826 字,大约阅读时间需要 9 分钟。

转自:http://www.cnblogs.com/spiritstudio/archive/2011/11/17/2252074.html

在使用UILabel存放字符串时,经常需要获取label的长宽数据,本文列出了部分常用的计算方法。

1.获取宽度,获取字符串不折行单行显示时所需要的长度 

CGSize titleSize = [aString sizeWithFont:font constrainedToSize:CGSizeMake(MAXFLOAT, 30)];

注:如果想得到宽度的话,size的width应该设为MAXFLOAT。

 

2.获取高度,获取字符串在指定的size内(宽度超过label的宽度则换行)所需的实际高度.

CGSize titleSize = [aString sizeWithFont:font constrainedToSize:CGSizeMake(label.frame.size.width, MAXFLOAT) lineBreakMode:UILineBreakModeWordWrap];

注:如果想得到高度的话,size的height应该设为MAXFLOAT。

 

3.实际编程时,有时需要计算一段文字最后一个字符的位置,并在其后添加图片或其他控件(如info图标),下面代码为计算label中最后一个字符后面一位的位置的方法。

CGSize sz = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(MAXFLOAT, 40)];

CGSize linesSz = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(label.frame.size.width, MAXFLOAT) lineBreakMode:UILineBreakModeWordWrap];

if(sz.width <= linesSz.width) //判断是否折行

{

        lastPoint = CGPointMake(label.frame.origin.x + sz.width, label.frame.origin.y);  

}

else  

{  

        lastPoint = CGPointMake(label.frame.origin.x + (int)sz.width % (int)linesSz.width,linesSz.height - sz.height);  

 

文章二,转自:http://www.cnblogs.com/heri/archive/2013/03/18/2965817.html

在大多属性情况下,给UILabel进行动态数据绑定的时候,往往需要根据字符串的多少,动态调整UILabel的宽度或高度。

下面分两种情况考虑:

1、UILabel宽度不变,根据字体多少,自动调整UILabel的高度,并折行显示。

代码如下:

 

  1. UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 10, 200, 20)];  
  2. label.font = [UIFont boldSystemFontOfSize:20.0f];  //UILabel的字体大小  
  3. label.numberOfLines = 0;  //必须定义这个属性,否则UILabel不会换行  
  4. label.textColor = [UIColor whiteColor];   
  5. label.textAlignment = NSTextAlignmentLeft;  //文本对齐方式  
  6. [label setBackgroundColor:[UIColor redColor]];  
  7.   
  8. //宽度不变,根据字的多少计算label的高度  
  9. NSString *str = @"可以更改此内容进行测试,宽度不变,高度根据内容自动调节";  
  10. CGSize size = [str sizeWithFont:label.font constrainedToSize:CGSizeMake(label.frame.size.width, MAXFLOAT) lineBreakMode:NSLineBreakByWordWrapping];  
  11. //根据计算结果重新设置UILabel的尺寸  
  12. [label setFrame:CGRectMake(0, 10, 200, size.height)];  
  13. label.text = str;  
  14.   
  15. [self.view addSubview:label];  
  16. [label release];  

2、UILabel高度不变,根据字体多少,自动调整UILabel的宽度,并折行显示

 

代码如下:

 

  1. UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 10, 20, 20)];  
  2. label.font = [UIFont boldSystemFontOfSize:20.0f];  //UILabel的字体大小  
  3. label.numberOfLines = 0;  //必须定义这个属性,否则UILabel不会换行  
  4. label.textColor = [UIColor whiteColor];   
  5. label.textAlignment = NSTextAlignmentLeft;  //文本对齐方式  
  6. [label setBackgroundColor:[UIColor redColor]];  
  7.   
  8. //高度固定不折行,根据字的多少计算label的宽度  
  9. NSString *str = @"高度不变获取宽度,获取字符串不折行单行显示时所需要的长度";  
  10. CGSize size = [str sizeWithFont:label.font constrainedToSize:CGSizeMake(MAXFLOAT, label.frame.size.height)];  
  11. NSLog(@"size.width=%f, size.height=%f", size.width, size.height);  
  12. //根据计算结果重新设置UILabel的尺寸  
  13. [label setFrame:CGRectMake(0, 10, size.width, 20)];  
  14. label.text = str;  
  15.   
  16. [self.view addSubview:label];  
  17. [label release];  

其中两种情况,核心代码均为size处的代码,均要把对应的size设置为MAXFLOAT

转载于:https://www.cnblogs.com/wangpei/p/4235595.html

你可能感兴趣的文章
【BZOJ3295】[Cqoi2011]动态逆序对 cdq分治
查看>>
【CF799E】Aquarium decoration 线段树
查看>>
大运飞天 鲲鹏展翅
查看>>
从ECMA到W3C
查看>>
OpenGL(十八) 顶点数组和抗锯齿(反走样)设置
查看>>
Activiti 删除key值相同的所有不同版本的流程定义
查看>>
软件工程--第十六周学习进度
查看>>
yii2 ActiveRecord多表关联以及多表关联搜索的实现
查看>>
搜狗输入法安装--ubuntu
查看>>
ps/2接口键盘的输入及显示
查看>>
在IntelliJ IDEA中安装Junit,TestNG
查看>>
C-Scanf连续调用多次并且存在%c的问题
查看>>
JAVA(二)异常/包及访问权限/多线程/泛型
查看>>
1-4 金币阵列问题
查看>>
设计模式-结构型模式
查看>>
六星经典CSAPP笔记(1)计算机系统巡游
查看>>
css
查看>>
爬取全部的校园新闻
查看>>
第五章 SpringCloud之Eureka-Client使用RestTemplate实现服务之间的调用
查看>>
POJ 1258 Agri-Net (Prim&Kruskal)
查看>>