在 4 的 基础上重写 以下的方法 control

  1. #pragma mark - 代理方法
  2. /** 计算单元格行高 */
  3. - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
  4. {
  5. /**
  6. 计算行高的方法,会在加载表格数据时,有多少行计算多少次 contentSize
  7.  
  8. 问题:此方法执行的时候,cell还没有被实例化!
  9. 但是:行高计算是在实例化cell时,通过设置status属性,计算的=>有了status模型,就可以知道行高!
  10.  
  11. 问题:如何在cell实例化之前,获得行高?
  12. 解决方法:通过status可以计算得到行高!=》再建立一个模型,专门计算所有控件的位置
  13. */
  14. HMStatusFrame *statusFrame = [[HMStatusFrame alloc] init];
  15. statusFrame.status = self.statuses[indexPath.row];
  16.  
  17. return statusFrame.cellHeight;
  18. }

HMStatusFrame.h文件

  1. #import <Foundation/Foundation.h>
  2. @class HMStatus;
  3.  
  4. /** 专门计算所有控件位置 */
  5. @interface HMStatusFrame : NSObject
  6.  
  7. @property (nonatomic, assign) CGRect iconF;
  8. @property (nonatomic, assign) CGRect nameF;
  9. @property (nonatomic, assign) CGRect vipF;
  10. @property (nonatomic, assign) CGRect textF;
  11. @property (nonatomic, assign) CGRect pictureF;
  12.  
  13. /** 行高 */
  14. @property (nonatomic, assign) CGFloat cellHeight;
  15.  
  16. /** 所有控件的尺寸都可以通过Status来计算得出 */
  17. @property (nonatomic, strong) HMStatus *status;
  18.  
  19. @end

m文件

  1. #import "HMStatusFrame.h"
  2. #import "HMStatus.h"
  3.  
  4. /** 姓名字体 */
  5. #define kNameFont [UIFont systemFontOfSize:14]
  6. /** 正文字体 */
  7. #define kTextFont [UIFont systemFontOfSize:16]
  8.  
  9. @implementation HMStatusFrame
  10.  
  11. - (void)setStatus:(HMStatus *)status
  12. {
  13. _status = status;
  14.  
  15. // 0. 定义间距
  16. CGFloat padding = ;
  17.  
  18. // 1. 头像
  19. CGFloat iconX = padding;
  20. CGFloat iconY = padding;
  21. CGFloat iconW = ;
  22. CGFloat iconH = ;
  23. self.iconF = CGRectMake(iconX, iconY, iconW, iconH);
  24.  
  25. // 2. 姓名大小由文字的长度来决定
  26. // boundingRectWithSize计算给定文本字符串所占的区域
  27. // 返回值是一个x,y = 0的CGRect,w,h是计算好的宽高
  28. //
  29. // 如果要计算多行的准确高度,需要传入NSStringDrawingUsesLineFragmentOrigin选项
  30. // dict用于指定字体的相关属性的字典,UIKit框架中的第一个头文件
  31. // context: nil
  32. NSDictionary *nameDict = @{NSFontAttributeName: kNameFont};
  33. CGRect nameFrame = [self.status.name boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:nameDict context:nil];
  34. nameFrame.origin.x = CGRectGetMaxX(self.iconF) + padding;
  35. nameFrame.origin.y = padding + (self.iconF.size.height - nameFrame.size.height) * 0.5;
  36. self.nameF = nameFrame;
  37.  
  38. // vip图标
  39. CGFloat vipX = CGRectGetMaxX(self.nameF) + padding;
  40. CGFloat vipY = self.nameF.origin.y;
  41. CGFloat vipW = ;
  42. CGFloat vipH = ;
  43. self.vipF = CGRectMake(vipX, vipY, vipW, vipH);
  44.  
  45. // 正文
  46. NSDictionary *textDict = @{NSFontAttributeName: kTextFont};
  47. CGRect textFrame = [self.status.text boundingRectWithSize:CGSizeMake(, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:textDict context:nil];
  48. textFrame.origin.x = padding;
  49. textFrame.origin.y = CGRectGetMaxY(self.iconF) + padding;
  50. self.textF = textFrame;
  51.  
  52. if (self.status.picture.length > ) {
  53. // 配图
  54. CGFloat pictureX = padding;
  55. CGFloat pictureY = CGRectGetMaxY(textFrame) + padding;
  56. CGFloat pictureW = ;
  57. CGFloat pictureH = ;
  58. self.pictureF = CGRectMake(pictureX, pictureY, pictureW, pictureH);
  59.  
  60. self.cellHeight = CGRectGetMaxY(self.pictureF) + padding;
  61. } else {
  62. self.cellHeight = CGRectGetMaxY(self.textF) + padding;
  63. }
  64. }
  65.  
  66. @end

IOS第八天(5:UITableViewController新浪微博, 计算行高)的更多相关文章

  1. IOS第八天(7:UITableViewController新浪微博,cell 复用的简单写法优化和cell高度从模型中获取)

    *********** #import "HMViewController.h" #import "HMStatus.h" #import "HMSt ...

  2. IOS第八天(6:UITableViewController新浪微博, 模型和 控件位置封装一起statusFrame)

    *****HMViewController #import "HMViewController.h" #import "HMStatus.h" #import ...

  3. IOS第八天(4:UITableViewController新浪微博, 代码创建布局和数据转模型)

    ******控制control #import "HMViewController.h" #import "HMStatus.h" #import " ...

  4. UITableView!别再用代码计算行高了(一)

    你还在用代码去计算行高吗?你不感觉那种方式很low吗?从今天起,试着做些改变吧! 别给我讲你喜欢写代码的感觉,你就是要用代码去计算行高,那我这篇文章不适合你. 在讲解复杂内容之前,还是先学习简单的内容 ...

  5. UITableView+FDTemplateLayoutCell计算行高显示<二>

    之前记录过一篇UITableView+FDTemplateLayoutCell计算行高不成功的博客... 传送门:http://www.cnblogs.com/pengsi/p/6571311.htm ...

  6. iOS 根据字符串内容动态计算行高

    + (CGFloat)textHeightFromTextString:(NSString *)text width:(CGFloat)textWidth fontSize:(CGFloat)size ...

  7. IOS第八天(3:UITableViewController团购, 点击底部代码调整)

    ****代理者的方法中 // 通知页脚视图调整视图显示状态 [footerView endRefresh]; //发送代理通知的类中 /** 视图控制器刷新完成调用方法 */ - (void)endR ...

  8. IOS第八天(2:UITableViewController团购,点击底部,xib加载更多, 代理模式)

    ******* HMViewController.h #import "HMViewController.h" #import "HMTg.h" #import ...

  9. IOS第八天(1:UITableViewController团购,数据转模型,xib显示数据)

    ******HMTg.h 模型数据 #import <Foundation/Foundation.h> @interface HMTg : NSObject @property (nona ...

随机推荐

  1. AngularJS 学习之表格

    1.ng-repeat指令可以完美的显示表格: 2.在表格中显示数据: <div ng-app="myApp" ng-controller=""custo ...

  2. HTTP基础07--认证

    何为认证 BASIC 认证 是从 HTTP/1.0 就定义的认证方式.即便是现在仍有一部分的网站会使用这种认证方式.是 Web 服务器与通信客户端之间进行的认证方式. 步骤 1: 当请求的资源需要 B ...

  3. 20145223《Java程序程序设计》第9周学习总结

    20145223<Java程序设计>第9周学习总结 教材学习内容总结 第十六章:整合数据库 JDBC入门 1.JDBC简介: 2.JDBC主要分成两个部分,JDBC应用程序开发者接口和JD ...

  4. codefroces 589A

    time limit per testsecondsmemory limit per testmegabytesinputstandard inputoutputstandard outputPoly ...

  5. 二叉搜索树 POJ 2418 Hardwood Species

    题目传送门 题意:输入一大堆字符串,问字典序输出每个字符串占的百分比 分析:二叉搜索树插入,然后中序遍历就是字典序,这里root 被new出来后要指向NULL,RE好几次.这题暴力sort也是可以过的 ...

  6. Android 自动化测试—robotium(七) 使用Junit_report测试报告

    使用Robotium进行测试的时候,要想可以导出明了的测试结果,可以使用junitreport来实现 junit-report下载地址:https://github.com/jsankey/andro ...

  7. 01_Swift2基础之Swift简介+创建

    1.Swift 1> Swift初影响 Swift 是新一代的 iOS.OS X 和 watchOS 和 tvOS 的app开发编程语言. 中文名"雨燕",寓意为敏捷.灵巧而 ...

  8. ccc 设置图片位置

    cc.Class({ extends: cc.Component, properties: { player:{ default:null, type:cc.Sprite } }, // use th ...

  9. [转]crontab环境变量设置

    原文连接:http://blog.csdn.net/zc02051126/article/details/20480289 come from http://www.360doc.com/conten ...

  10. Universal JS module loader

    With dependency ;(function (root, factory) { if (typeof define === 'function' && define.amd) ...