我在我的应用中实现了聊天功能,并且我正在推动自己的UIViewController
这样做。我使用UITableView
代替UICollectionView
,因为它更符合我的需求。
我的一些消息是基于文本的(可以是多行的),其中一些是基于图像的。我还有一些单元格可以显示标题(时间戳信息)和页脚("发送...","已发送"等)。
当我构建数据源时,我正在计算每个单元格所需的高度,并在我的tableView:heightForRowAtIndexPath:
方法中返回该数据。
我正在尝试对此过程进行更多控制,因为当我希望UITableView
将大部分时间花在底部时,使用自动布局自动调整单元格并不能很好地工作比在顶部。
所以,我有以下需求:
UITableView
' contentSize
应正确计算UITableView
底部插入新单元格应该效果很好,并且动画也很好。我发现的问题是,只有部分单元格的高度由heightForRowAtIndexPath:
检查。
例如,这是一个特例:
viewWillAppear:
(或viewDidAppear:
,它似乎无关紧要),我称之为:int lastRow = (int)(self.dataSource.count - 1);
NSIndexPath *lastPath = [NSIndexPath indexPathForRow:lastRow inSection:0];
[self.tableView scrollToRowAtIndexPath:lastPath
atScrollPosition:UITableViewScrollPositionBottom
animated:animated];
animated
变量是YES
还是NO
并未发生太大变化。 YES
似乎多次调用,但它们都只是在我的数据源的顶部和底部(开始/结束)调用值。这意味着我计算的内容高度(正确)与self.tableView.contentSize.height
不一致。
但是,如果我手动向上滚动所有单元格,则所有内容都会被整理出来,UITableView
最终会与我计算出的高度对齐。
除了需要滚动到底部的初始视图外,我还希望能够在UITableView
底部的新单元格中添加新消息,然后将它们设置为视图。如果我让UITableView
管理其内容大小和自己的动画,这真的不会很好。
根据Apple的文档,我希望它为每个单元格调用heightForRowAtIndexPath:
。我是从here获得的:
使用tableView:heightForRowAtIndexPath:而不是rowHeight属性会对性能产生影响。每次显示表视图时,它会在代理上为每个行调用
tableView:heightForRowAtIndexPath:
,这会导致表视图具有大量行(大约1000或更多)的显着性能问题。另请参阅tableView:estimatedHeightForRowAtIndexPath:
。
所以,我的基本问题是如何强制UITableView
让我设置所有这些值。我在UITableViewCell
个实例中使用了自动布局,但我想控制单元格大小调整,而不是让UITableView
这样做。有什么建议吗?
答案 0 :(得分:0)
只需添加tableView.estimatedRowHeight = 0
就可以解决问题。