得到UILable在设置字体样式后的真实长度

reyzhang 12年前

在用代码创建UI时,首先就是要创建UIframe,一般的控件在创建时都会调用如下函数:</span>initWithFrame:(CGRect)frame.在取frame的时候有几种情况,一是你已知当前控件在父视图中的绝对位置,你可以直接输入坐标位置及大小就可以创建了。还有一种就是在已知控件的基础上做参考,来计算自己的坐标位置。我在工作中就遇到了一个这样问题:</span>我有一个cellcell上显示了标题(标题是显示是用的UILabel,我想根据需求在标题后添加一个标识图片。这个图片的位置不确定就需要我们计算出来。我使用的就是第二种方法,以已知的标题坐标来得到标识图片的坐标。得到标题的坐标很简单,可以用</span>cell.titleLabel.frame来得到标题的坐标位置。那么要在标题后显示标识图片,还需要知道titleLabel的宽度。这样titleLabel 的初始坐标+titleLabel的宽度,就是在titleLabel的尾部坐标,在这个位置就是标识图片的坐标了。现在的问题是如何取titleLabel的宽度呢?由于我们可以对UILabel设置字体大小加粗等行为,使得UILabel的宽度并非是文字的长度。这就需要我们另想办法。还好,ios 已经我们想到了这点,我们可以调用一个函数来得到UILabel在设置字体大小加粗后的真实宽度:
</span>CGSize labelSize=[cell.titleLabel.text sizeWithFont:cell.titleLabel.font   
             
constraninedToSize:CGSizeMake(FLT_MAX,FLT_MAX)</span> 
             
lineBreakMode:UILineBreakModeWordWrap];
</span>这样labelSize.width就是这个titleLable的真实宽度,在得到这个宽度后我们就可以计算出标识图片的位置。