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执行顺序:

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

 1 #pragma mark - Table view data source  
 2 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;  
 3 先看有几个section 默认1个
 4 
 5 #pragma mark - Table view delegate  
 6 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;  
 7 标题头的高度
 8 
 9 #pragma mark - Table view data source  
10 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;  
11 *******每个section中有多少行cell  
12 
13 #pragma mark - Table view delegate  
14 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;  
15   ********每个cell的行高
16 
17 #pragma mark - Table view data source  
18 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;  
19 *********初始化每个cell的内容  
20 
21 #pragma mark - Table view delegate  
22 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;

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

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

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

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

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

原文地址:https://www.cnblogs.com/pengsi/p/5673385.html