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];