IOS第八天(5:UITableViewController新浪微博, 计算行高)
在 4 的 基础上重写 以下的方法 control
- #pragma mark - 代理方法
- /** 计算单元格行高 */
- - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
- {
- /**
- 计算行高的方法,会在加载表格数据时,有多少行计算多少次 contentSize
- 问题:此方法执行的时候,cell还没有被实例化!
- 但是:行高计算是在实例化cell时,通过设置status属性,计算的=>有了status模型,就可以知道行高!
- 问题:如何在cell实例化之前,获得行高?
- 解决方法:通过status可以计算得到行高!=》再建立一个模型,专门计算所有控件的位置
- */
- HMStatusFrame *statusFrame = [[HMStatusFrame alloc] init];
- statusFrame.status = self.statuses[indexPath.row];
- return statusFrame.cellHeight;
- }
HMStatusFrame.h文件
- #import <Foundation/Foundation.h>
- @class HMStatus;
- /** 专门计算所有控件位置 */
- @interface HMStatusFrame : NSObject
- @property (nonatomic, assign) CGRect iconF;
- @property (nonatomic, assign) CGRect nameF;
- @property (nonatomic, assign) CGRect vipF;
- @property (nonatomic, assign) CGRect textF;
- @property (nonatomic, assign) CGRect pictureF;
- /** 行高 */
- @property (nonatomic, assign) CGFloat cellHeight;
- /** 所有控件的尺寸都可以通过Status来计算得出 */
- @property (nonatomic, strong) HMStatus *status;
- @end
m文件
- #import "HMStatusFrame.h"
- #import "HMStatus.h"
- /** 姓名字体 */
- #define kNameFont [UIFont systemFontOfSize:14]
- /** 正文字体 */
- #define kTextFont [UIFont systemFontOfSize:16]
- @implementation HMStatusFrame
- - (void)setStatus:(HMStatus *)status
- {
- _status = status;
- // 0. 定义间距
- CGFloat padding = ;
- // 1. 头像
- CGFloat iconX = padding;
- CGFloat iconY = padding;
- CGFloat iconW = ;
- CGFloat iconH = ;
- self.iconF = CGRectMake(iconX, iconY, iconW, iconH);
- // 2. 姓名大小由文字的长度来决定
- // boundingRectWithSize计算给定文本字符串所占的区域
- // 返回值是一个x,y = 0的CGRect,w,h是计算好的宽高
- //
- // 如果要计算多行的准确高度,需要传入NSStringDrawingUsesLineFragmentOrigin选项
- // dict用于指定字体的相关属性的字典,UIKit框架中的第一个头文件
- // context: nil
- NSDictionary *nameDict = @{NSFontAttributeName: kNameFont};
- CGRect nameFrame = [self.status.name boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:nameDict context:nil];
- nameFrame.origin.x = CGRectGetMaxX(self.iconF) + padding;
- nameFrame.origin.y = padding + (self.iconF.size.height - nameFrame.size.height) * 0.5;
- self.nameF = nameFrame;
- // vip图标
- CGFloat vipX = CGRectGetMaxX(self.nameF) + padding;
- CGFloat vipY = self.nameF.origin.y;
- CGFloat vipW = ;
- CGFloat vipH = ;
- self.vipF = CGRectMake(vipX, vipY, vipW, vipH);
- // 正文
- NSDictionary *textDict = @{NSFontAttributeName: kTextFont};
- CGRect textFrame = [self.status.text boundingRectWithSize:CGSizeMake(, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:textDict context:nil];
- textFrame.origin.x = padding;
- textFrame.origin.y = CGRectGetMaxY(self.iconF) + padding;
- self.textF = textFrame;
- if (self.status.picture.length > ) {
- // 配图
- CGFloat pictureX = padding;
- CGFloat pictureY = CGRectGetMaxY(textFrame) + padding;
- CGFloat pictureW = ;
- CGFloat pictureH = ;
- self.pictureF = CGRectMake(pictureX, pictureY, pictureW, pictureH);
- self.cellHeight = CGRectGetMaxY(self.pictureF) + padding;
- } else {
- self.cellHeight = CGRectGetMaxY(self.textF) + padding;
- }
- }
- @end
IOS第八天(5:UITableViewController新浪微博, 计算行高)的更多相关文章
- IOS第八天(7:UITableViewController新浪微博,cell 复用的简单写法优化和cell高度从模型中获取)
*********** #import "HMViewController.h" #import "HMStatus.h" #import "HMSt ...
- IOS第八天(6:UITableViewController新浪微博, 模型和 控件位置封装一起statusFrame)
*****HMViewController #import "HMViewController.h" #import "HMStatus.h" #import ...
- IOS第八天(4:UITableViewController新浪微博, 代码创建布局和数据转模型)
******控制control #import "HMViewController.h" #import "HMStatus.h" #import " ...
- UITableView!别再用代码计算行高了(一)
你还在用代码去计算行高吗?你不感觉那种方式很low吗?从今天起,试着做些改变吧! 别给我讲你喜欢写代码的感觉,你就是要用代码去计算行高,那我这篇文章不适合你. 在讲解复杂内容之前,还是先学习简单的内容 ...
- UITableView+FDTemplateLayoutCell计算行高显示<二>
之前记录过一篇UITableView+FDTemplateLayoutCell计算行高不成功的博客... 传送门:http://www.cnblogs.com/pengsi/p/6571311.htm ...
- iOS 根据字符串内容动态计算行高
+ (CGFloat)textHeightFromTextString:(NSString *)text width:(CGFloat)textWidth fontSize:(CGFloat)size ...
- IOS第八天(3:UITableViewController团购, 点击底部代码调整)
****代理者的方法中 // 通知页脚视图调整视图显示状态 [footerView endRefresh]; //发送代理通知的类中 /** 视图控制器刷新完成调用方法 */ - (void)endR ...
- IOS第八天(2:UITableViewController团购,点击底部,xib加载更多, 代理模式)
******* HMViewController.h #import "HMViewController.h" #import "HMTg.h" #import ...
- IOS第八天(1:UITableViewController团购,数据转模型,xib显示数据)
******HMTg.h 模型数据 #import <Foundation/Foundation.h> @interface HMTg : NSObject @property (nona ...
随机推荐
- AngularJS 学习之表格
1.ng-repeat指令可以完美的显示表格: 2.在表格中显示数据: <div ng-app="myApp" ng-controller=""custo ...
- HTTP基础07--认证
何为认证 BASIC 认证 是从 HTTP/1.0 就定义的认证方式.即便是现在仍有一部分的网站会使用这种认证方式.是 Web 服务器与通信客户端之间进行的认证方式. 步骤 1: 当请求的资源需要 B ...
- 20145223《Java程序程序设计》第9周学习总结
20145223<Java程序设计>第9周学习总结 教材学习内容总结 第十六章:整合数据库 JDBC入门 1.JDBC简介: 2.JDBC主要分成两个部分,JDBC应用程序开发者接口和JD ...
- codefroces 589A
time limit per testsecondsmemory limit per testmegabytesinputstandard inputoutputstandard outputPoly ...
- 二叉搜索树 POJ 2418 Hardwood Species
题目传送门 题意:输入一大堆字符串,问字典序输出每个字符串占的百分比 分析:二叉搜索树插入,然后中序遍历就是字典序,这里root 被new出来后要指向NULL,RE好几次.这题暴力sort也是可以过的 ...
- Android 自动化测试—robotium(七) 使用Junit_report测试报告
使用Robotium进行测试的时候,要想可以导出明了的测试结果,可以使用junitreport来实现 junit-report下载地址:https://github.com/jsankey/andro ...
- 01_Swift2基础之Swift简介+创建
1.Swift 1> Swift初影响 Swift 是新一代的 iOS.OS X 和 watchOS 和 tvOS 的app开发编程语言. 中文名"雨燕",寓意为敏捷.灵巧而 ...
- ccc 设置图片位置
cc.Class({ extends: cc.Component, properties: { player:{ default:null, type:cc.Sprite } }, // use th ...
- [转]crontab环境变量设置
原文连接:http://blog.csdn.net/zc02051126/article/details/20480289 come from http://www.360doc.com/conten ...
- Universal JS module loader
With dependency ;(function (root, factory) { if (typeof define === 'function' && define.amd) ...