移动应用软件开发综合实训(基于iOS平台)-2017 iOS电子字典-单词释义表视图单元格自动行高实现 iOS tableView三种计算动态行高方法.docx

移动应用软件开发综合实训(基于iOS平台)-2017 iOS电子字典-单词释义表视图单元格自动行高实现 iOS tableView三种计算动态行高方法.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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长度匹配。 如果这个页面用纯手码写,可想而知

您可能关注的文档

文档评论(0)

WanDocx + 关注
实名认证
内容提供者

大部分文档都有全套资料,如需打包优惠下载,请留言联系。 所有资料均来源于互联网公开下载资源,如有侵权,请联系管理员及时删除。

1亿VIP精品文档

相关文档