Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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 UITableViewCell高度和滚动问题的自动布局_Ios_Objective C_Uitableview_Autolayout_Ios Autolayout - Fatal编程技术网

Ios UITableViewCell高度和滚动问题的自动布局

Ios UITableViewCell高度和滚动问题的自动布局,ios,objective-c,uitableview,autolayout,ios-autolayout,Ios,Objective C,Uitableview,Autolayout,Ios Autolayout,我最近一直在开发一个聊天客户端。正如预期的那样,我需要有单元格的动态高度。为此,我使用了自动布局,并在UITableView self.tableview.estimatedRowHeight = 77.5f; self.tableview.rowHeight = UITableViewAutomaticDimension; 我还在tableView中使用inputAccessoryView,以便在底部有一个始终存在的UITextView,就像iPhone上的Messages应用程序一样con

我最近一直在开发一个聊天客户端。正如预期的那样,我需要有单元格的动态高度。为此,我使用了自动布局,并在
UITableView

self.tableview.estimatedRowHeight = 77.5f;
self.tableview.rowHeight = UITableViewAutomaticDimension;
我还在tableView中使用
inputAccessoryView
,以便在底部有一个始终存在的UITextView,就像iPhone上的Messages应用程序一样<当键盘出现时,tableView的code>contentInset被适当地设置,并且似乎工作得很好

当我尝试将
tableView
滚动到底部时,问题就出现了

a)聊天是第一次加载

b)当收到新消息时

对于a)我已经尝试了各种技术,比如在
viewDidLoad
中使用first,在
viewdidearch
中使用
dispatch\u after
performSelector:withObject:afterDelay
动画和非动画的延迟滚动条。但它们只能在iOS 9上工作,而不能在iOS 8上工作

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

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

我认为在滚动时,
tableView
可能错误地估计了行高。但是,实际行高度与预期一致。没有任何文本被剥离

ViewController本身是一个
UIViewController
,但我创建了一个
UITableViewController
实例,用于添加
UIRefreshcontrol

显然,每当我在
tableView
上调用“reloadData”时,除非我滚动一次,否则它不会正确地转到最后一行

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

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

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

您使用哪种代码转到最后一行?
滚动到indepath:animated:
传入最后一行
nsindepath