- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
iOS tableView三种计算动态行高方法
一、旧方法
现在常规的动态行高的计算方法还是用
[str?boundingRectWithSize:size?options:NSStringDrawingUsesLineFragmentOrigin?attributes:attrs?context:nil].size?
这其中需要先传入一个最大尺寸和一个属性字典,特殊的格式要求都写在属性字典中。
NSDictionary?*attrs?=?@{NSFontAttributeName?:?font};?
整个流程的基本思想大概就是:用一个字符串对象来调用此方法,中间需要传入一个属性字典来告知字体和样式,然后根据字符串长度的多少来算出应该给多大的frame。前面传进的size一般可以设置最大宽度。 此方法一般写成分类便于调用。
#import?NSString+Size.h?
?
@implementation?NSString?(Size)?
?
/**?
*?类方法计算size大小?
*/?
+?(CGSize)sizeWithString:(NSString?*)str?andFount:(UIFont?*)font?andMaxSize:(CGSize)size?
{?
NSDictionary?*attrs?=?@{NSFontAttributeName?:?font};?
return?[str?boundingRectWithSize:size?options:NSStringDrawingUsesLineFragmentOrigin?attributes:attrs?context:nil].size;?
}?
?
/**?
*?对象方法计算size大小?
*/?
-?(CGSize)sizeWithFount:(UIFont?*)font?andMaxSize:(CGSize)size;?
{?
NSDictionary?*attrs?=?@{NSFontAttributeName?:?font};?
return?[self?boundingRectWithSize:size?options:NSStringDrawingUsesLineFragmentOrigin?attributes:attrs?context:nil].size;?
}?
@end?
这些方法从字面上看也比较容易理解。
调用时的代码基本就是取到一个字符串,传入一个font和一个最大size,如下把宽设置成了270就是最大宽度为270高度往下顺延的话就把高度写成MAXFLOAT。
NSString?*text?=?_message.text;?
CGSize?textSize?=?[text?sizeWithFount:[UIFont?systemFontOfSize:14]?andMaxSize:CGSizeMake(270,?MAXFLOAT)];?
然后在frame中取到最下面一个空间的maxY,从而让每一个cell在set方法中就得到自己的行高 ,然后通过cell的类方法返回。
二、新方法
随着iOS8的自动布局和Interface builder越来越成熟,逐渐衍生出了一种先用storyboard或xib界面再算自定义行高的方法。
这种方法一般需要先搭建一个图形化界面。如下图大概搭一个比较复杂的cell。
首先可以清晰的看出,用IB搭建看上去很快就能搭建完毕,并且有的图片或是view的背景设置了之后能看出界面大概的感觉。这里需要注意的就是label设置约束的方法,普通控件一般都要设置四个约束才能固定位置,label和button只设置两个约束(只需要写固定位置的两条约束,不需要写自身宽高的约束)也不会报错,但是需要在editor中设置sizeToFit,这样可以根据字数自动给你分配一个控件的大小。
一般评论类的label肯定都是字数比较多的,这时2条约束就不够了需要再设置一个最大宽度的约束,如图1我设置的方法是,把评论label与左右边界的间隙给设定了,这个在IB中叫Leading(前)和Training(后),高的约束我们没有写如果字数超过了一行他就会自己往下顺延。 这么写相较于把宽度约束写死的好处是会自动根据屏幕适配不管屏幕多大都是左右空出若干像素。这样做也有局限性,就是假设给这个label设置一个背景色,如果字数就5个字背景色也会延伸到一整行。如果QQ聊天页面也这样做,不管是几个字都是一整行的聊天气泡那会很丑。于是有了一种少则背景也少,多也不超过最大宽度的做法,就是设置label的width的less than来设置最大宽度。这么做如果字数不足一行的话,约束也会自动缩到与label长度匹配。
如果这个页面用纯手码写,可想而知
您可能关注的文档
- 移动商务应用开发实训 电子商务技术17级 4 2016年上学期课程设计报告书(样本).docx
- 移动通信技术应用 LTE相关规范 36212-880.doc
- 移动通信网络优化课程资源 LTE网络优化 LTE沪宁高铁网络优化案例.doc
- 移动网络规划和优化分析 覆盖增强策略——直放站 覆盖增强策略之直放站技术.docx
- 移动营销实务2 O2O模式 2016年中国O2O市场发展概况.docx
- 移动应用服务器端开发(基于JSP技术)-2017 GridView 实验报告:网格视图.doc
- 移动应用软件开发(基于iOS平台)-2017 生日快乐歌 为界面2添加动画 gjs.docx
- 移动应用软件开发(基于iOS平台)-2017 挑战CodeMonkey游戏 第九关 gjs.docx
- 移动应用软件开发(基于iOS平台)-2017 挑战CodeMonkey游戏 第十二关 gjs.docx
- 移动应用软件开发综合实训(基于Android平台)-2017 ContentProvider组件 多媒体播放器-文本资源-126-访问系统ContentProvider.docx
- 北师大版小学数学三年级上册《寄书》教学设计.docx
- 统编版(部编版)语文二年级上册《雪孩子》教学设计.docx
- 统编版(部编版)语文二年级上册《八角楼上》教学设计.docx
- 北师大版小学数学三年级上册《长方形周长》教学设计.docx
- 北师大版小学数学三年级上册《丰收了》教学设计.docx
- 统编版(部编版)语文二年级上册《夜宿山寺》教学设计.docx
- 统编版(部编版)语文二年级上册《风娃娃》教学设计.docx
- 统编版(部编版)语文二年级上册《朱德的扁担》教学设计.docx
- 统编版(部编版)语文二年级上册《难忘的泼水节》教学设计.docx
- 统编版(部编版)语文二年级上册《纸船和风筝》教学设计.docx
文档评论(0)