Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 未为每个单元格调用heightForRowAtIndexPath_Ios_Objective C_Uitableview - Fatal编程技术网

Ios 未为每个单元格调用heightForRowAtIndexPath

Ios 未为每个单元格调用heightForRowAtIndexPath,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我正在我的应用程序中实现聊天功能,我正在使用自己的UIViewController来实现。我使用的是UITableView而不是UICollectionView,因为它更适合我的需要 我的一些信息是基于文本的(可以是多行的),还有一些是基于图像的。我还准备了一些单元格来显示页眉(时间戳信息)和页脚(“发送…”、“传递”等) 当我构建数据源时,我计算每个单元格所需的高度,并在我的tableView:heightforrowatinexpath:方法中返回该数据 我正试图对这个过程进行更多的控制,因

我正在我的应用程序中实现聊天功能,我正在使用自己的
UIViewController
来实现。我使用的是
UITableView
而不是
UICollectionView
,因为它更适合我的需要

我的一些信息是基于文本的(可以是多行的),还有一些是基于图像的。我还准备了一些单元格来显示页眉(时间戳信息)和页脚(“发送…”、“传递”等)

当我构建数据源时,我计算每个单元格所需的高度,并在我的
tableView:heightforrowatinexpath:
方法中返回该数据

我正试图对这个过程进行更多的控制,因为当我希望
UITableView
将大部分时间花在底部而不是顶部时,使用自动布局自动调整单元格大小的效果并不理想

因此,我有以下需要:

  • 当视图加载时,它应该开始完全滚动到底部
  • 此时,应正确计算
    UITableView
    contentSize
  • UITableView
    的底部插入新单元格应该可以很好地工作,也可以很好地设置动画
我发现的问题是,只有部分单元格的高度由
heightforrowatinexpath:
检查

例如,这里有一个特殊情况:

  • 我有100条消息+32个页眉/页脚单元格(总共132个单元格)
  • 视图中将出现:
    (或
    视图显示:
    ,这似乎无关紧要),我称之为:
无论
animated
变量是
YES
还是
NO
,变化不大
YES
似乎调用了多次,但它们实际上都只调用数据源顶部和底部(开始/结束)的值。这意味着我计算的内容高度(正确)与self.tableView.contentSize.height不一致

但是,如果我手动向上滚动所有单元格,所有内容都会得到整理,
UITableView
最终与我计算的高度对齐

除了需要滚动到底部的初始视图外,我还希望能够将新消息添加到
UITableView
底部的新单元格中,然后在视图中设置动画。如果我让
UITableView
管理它的内容大小和自己的动画,那真的不行

根据苹果的文档,我希望它为每个单元格调用
heightforrowatinexpath:
。我是从以下方面得到的:

使用tableView:heightForRowAtIndexPath:而不是rowHeight属性会影响性能。每次显示一个表视图时,它都会为其每一行调用代理上的
tableView:heightforrowatinexpath:
,这可能会导致具有大量行(大约1000行或更多行)的表视图出现严重的性能问题。另请参见
tableView:estimatedheightforrowatinexpath:


因此,我的基本问题是如何强制
UITableView
让我设置所有这些值。我在
UITableViewCell
实例本身中使用自动布局,但我想控制单元格大小,而不是让
UITableView
这样做。有什么建议吗?

只需添加
tableView.estimatedRowHeight=0
即可解决问题。

在表中插入新行后。调用[yourTable reloadData]获取对heightForRowAtIndexPath的调用:
int lastRow           = (int)(self.dataSource.count - 1);
NSIndexPath *lastPath = [NSIndexPath indexPathForRow:lastRow inSection:0];
[self.tableView scrollToRowAtIndexPath:lastPath 
                      atScrollPosition:UITableViewScrollPositionBottom
                              animated:animated];