UITableViewCell高度和滚动的Autolayouts |问题

时间:2015-10-22 20:02:27

标签: ios objective-c uitableview autolayout ios-autolayout

我最近一直在聊聊天客户。正如预期的那样,我需要为细胞提供动态高度。我为此使用了自动布局,并在UITableView

上设置了两个重要属性
self.tableview.estimatedRowHeight = 77.5f;
self.tableview.rowHeight = UITableViewAutomaticDimension;

我也使用inputAccessoryView for tableView在底部有一个永远存在的UITextView,就像iPhone上的Messages app一样。

表示,当键盘出现时,tableView的contentInset设置得恰到好处。

当我尝试在

时将tableView滚动到底部时,问题就开始了

a)首次加载聊天

b)收到一些新邮件时。

对于 a)我已经尝试了各种技术,例如viewDidLoadviewDidAppearviewWillAppear等首先使用{{1动画和非动画都是{}或dispatch_after。但它们只适用于iOS 9而不适用于iOS 8。

对于 b)我将新的聊天消息添加到后备数据存储区,调用performSelector:withObject:afterDelay并在最后一行之后立即滚动。它适用于iOS 9但不适用于iOS 8.我还尝试reloadData只插入一个新行。但是,它会在新添加的行和底部布局(带或不带键盘的inputAccessoryView)之间生成一个空白区域。

在iOS 8上,该行的一半仍然是不可见的,有时甚至是多行。我一开始滚动就会调整。

我认为insertRowsAtIndexPaths在滚动时可能会错误地估计行高。但是,实际的行高是预期的。根本没有删除任何文字。

ViewController本身是tableView,但我创建了一个UIViewController实例,用于按here所述添加UITableViewController

显然,每当我打电话给'reloadData'在UIRefreshcontrol,除非我滚动一次,否则它不会正确地进入最后一行。

更新 显然,我必须在iOS 8上实现tableView并手动确定每个单元格的高度。只有滚动才能正常工作。

1 个答案:

答案 0 :(得分:0)

使用此代码滚动到重新加载后的最后一行

[tbl scrollToRowAtIndexPath:[NSIndexPath new] atScrollPosition:UITableViewScrollPositionBottom animated:YES];