UILabel、UITextView自适应得到高度
2015-07-16 14:14
591 查看
转载自:http://blog.csdn.net/xcysuccess3/article/details/8331549
在iOS中,经常遇到需要根据字符串的内容动态指定UILabel,UITextView,UITableViewCell等的高度的情况,这个时候就需要动态的计算字符串内容的高度,下面是计算的方法:
/**
@method 获取指定宽度情况ixa,字符串value的高度
@param value 待计算的字符串
@param fontSize 字体的大小
@param andWidth 限制字符串显示区域的宽度
@result float 返回的高度
*/
- (float) heightForString:(NSString *)value fontSize:(float)fontSize andWidth:(float)width
{
CGSize sizeToFit = [value sizeWithFont:[UIFont systemFontOfSize:fontSize] constrainedToSize:CGSizeMake(width, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap];//此处的换行类型(lineBreakMode)可根据自己的实际情况进行设置
return sizeToFit.height;
}
前不久QA报了个文字显示不全的bug,我看了下代码,发现是计算高度出了问题。之前的同事在UITableViewCell中使用了UITextView,但是计算高度时使用了和UILabel相同的的方法。
其实UITextView在上下左右分别有一个8px的padding,当使用[NSString sizeWithFont:constrainedToSize:lineBreakMode:]时,需要将UITextView.contentSize.width减去16像素(左右的padding 2 x 8px)。同时返回的高度中再加上16像素(上下的padding),这样得到的才是UITextView真正适应内容的高度。
示例代码如下:
在iOS中,经常遇到需要根据字符串的内容动态指定UILabel,UITextView,UITableViewCell等的高度的情况,这个时候就需要动态的计算字符串内容的高度,下面是计算的方法:
/**
@method 获取指定宽度情况ixa,字符串value的高度
@param value 待计算的字符串
@param fontSize 字体的大小
@param andWidth 限制字符串显示区域的宽度
@result float 返回的高度
*/
- (float) heightForString:(NSString *)value fontSize:(float)fontSize andWidth:(float)width
{
CGSize sizeToFit = [value sizeWithFont:[UIFont systemFontOfSize:fontSize] constrainedToSize:CGSizeMake(width, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap];//此处的换行类型(lineBreakMode)可根据自己的实际情况进行设置
return sizeToFit.height;
}
前不久QA报了个文字显示不全的bug,我看了下代码,发现是计算高度出了问题。之前的同事在UITableViewCell中使用了UITextView,但是计算高度时使用了和UILabel相同的的方法。
其实UITextView在上下左右分别有一个8px的padding,当使用[NSString sizeWithFont:constrainedToSize:lineBreakMode:]时,需要将UITextView.contentSize.width减去16像素(左右的padding 2 x 8px)。同时返回的高度中再加上16像素(上下的padding),这样得到的才是UITextView真正适应内容的高度。
示例代码如下:
+ (float) heightForTextView: (UITextView *)textView WithText: (NSString *) strText{ float fPadding = 16.0; // 8.0px x 2 CGSize constraint = CGSizeMake(textView.contentSize.width - fPadding, CGFLOAT_MAX); CGSize size = [strText sizeWithFont: textView.font constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap]; float fHeight = size.height + 16.0; return fHeight; }
相关文章推荐
- Android开发UI之动画侦听
- UIButton 上设置 self.imageView self.titleLabel
- Builder 建造者 (创建型)
- EasyUI datagird 排序 按数字类型的问题
- 玩转iOS 9的UIDynamics
- WPF standard ComboBox Items Source Change Issue
- Android中使用Handler机制更新UI的三种解决方案
- UITableViewCell中的imageView固定大小
- Android UI学习之RadioButton和RadioGroup
- (C#)使用队列(Queue)解决简单的并发问题
- Mac下的UI自动化测试 (四)
- iOS UILocalNotification 多个本地通知,怎么有区分的删除
- POJ 2299 Ultra-QuickSort 树状数组,归并排序
- iOS数组count操作(NSUInteger)的安全性
- 如何更好地限制一个UITextField的输入长度
- SAP GUI FOR HTML登陆 (转)
- Windows 10 build 10240预览版上手操作视频
- 玩转iOS 9的UIDynamics
- iOS开发UI技巧篇 -- UILable
- Mac下的UI自动化测试 (三)