转载 :http://www.cnblogs.com/viviyachu/archive/2012/03/07/2383363.html
在使用UILabel存放字符串时,经常需要获取label的长宽数据,本文列出了部分常用的计算方法。
1.获取宽度,获取字符串不折行单行显示时所需要的长度
CGSize titleSize = [aString sizeWithFont:font constrainedToSize:CGSizeMake(MAXFLOAT, 30)];
- 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);
-
}
=======================================================================
在iphone开发中处理table时常常会有这样的问题,table中cell的高度不是固定的,而是是根据其中的内容不同而不同的。对与这种情况,sdk本身并没有很好的支持,经过一翻摸索,发现大家通常的做法都是在实现 heightForRowAtIndexPath 方法时,根据内容计算出来显示的高度。 幸运的是,nsstring内置了几个好用的函数可以方便的计算出来字符串被现实出来时占有的屏幕高度:
- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size;
- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(UILineBreakMode)lineBreakMode;
- (CGSize)sizeWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode;
- (CGSize)sizeWithFont:(UIFont *)font minFontSize:(CGFloat)minFontSize actualFontSize:(CGFloat *)actualFontSize forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode;
CGSize maximumLabelSize = CGSizeMake(9999999, frame.size.height);
CGSize expectedLabelSize = [title sizeWithFont:[UIFont systemFontOfSize: 18.0]
constrainedToSize:maximumLabelSize
lineBreakMode:UILineBreakModeWordWrap];
CGRect titleLabelFrame = CGRectMake(0, frame.size.height/2+2, expectedLabelSize.width, 1);