iOS tableview的常用delegate和dataSource执行顺序

在这次项目中遇到了一个特别奇葩的问题:表视图创建的cell在7以上的系统能正常运行显示,在模拟器上就不能正常实现......为解决这个问题,纠结了好久......

对在7系统上不显示的猜测:

用masory设置约束不对,导致cell不显示;

对这个猜测也弄了好久,对一个个控件的约束都好好检查了一遍,发现实在是没有错的...后来迫不得已,自己不用masory,直接用frame约束,发现还是不显示,这才对masory的问题放弃了....

最后考虑了下:他不是内容不显示,他是直接这些cell不显示,有没有可能是cell的高度问题,通过打断点,调试,发现确实是cell的高度问题,导致cell的不显示,知道问题的原因就好办了:

因为我的cell的高度动态的,我是在cell赋值的时候根据文字的多少计算label的高度,把每个cell的高度存到model里,控制器直接返回cell的高度即可.发现在cell的高度的方法里,cell的高度直接都返回为0了,导致cell的不显示了.

这时候想到了iOS tableview的常用delegate和dataSource执行顺序:

常用的也就是下面几个方法了:

 #pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
先看有几个section 默认1个 #pragma mark - Table view delegate
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
标题头的高度 #pragma mark - Table view data source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
*******每个section中有多少行cell #pragma mark - Table view delegate
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
********每个cell的行高 #pragma mark - Table view data source
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
*********初始化每个cell的内容 #pragma mark - Table view delegate
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;

创建表视图的时候会先调用cell的高度的方法,再创建cell,一开始高度为0,cell当然不显示啦......

所以,比较傻一点的方法就是在请求到数据的时候计算cell中可变的label的高度,存到model中即可,这样也是最保险的方法.

虽然...功能实现了..可我还是纠结的问题没有解决:

为什么在模拟器和7以上的系统上可以正常运行,在7的系统就不行呢????要说高度都为0啊....

有知道的朋友可以回复我哟....我们共同进步,加油!!!

上一篇:[iOS基础控件 - 6.1] 汽车品牌列表 UITableView多项显示


下一篇:兼容好的JS图片上传预览代码