scrollToRowAtIndexPath在iOS 8上无法正确滚动到底部

时间:2016-07-27 11:25:04

标签: ios swift uitableview

这里有一个奇怪的问题。我想将我的表视图滚动到第1部分第0行的底部。我正在使用此代码:

tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 1), atScrollPosition: .Bottom, animated: true)

它似乎在iOS 9.0及更高版本的模拟器中完美运行。但是在我的设备(iOS 8.1)和8.3的模拟器上,它完全相反。它滚动到单元格的顶部而不是底部!似乎很奇怪。我在这里做错了什么想法?非常感谢任何指针!感谢

3 个答案:

答案 0 :(得分:13)

根据this answer类似的问题,它似乎是iOS 8中的一个错误。一种解决方法是将滚动延迟很少量(此代码也可以在链接的答案中找到,但它是在Objective-C)。请注意,我没有测试此代码,因为我没有安装iOS 8模拟器。

let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC)))
dispatch_after(delayTime, dispatch_get_main_queue()) {
    self.tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 1), atScrollPosition: .Bottom, animated: true)
} 

编辑:这是Swift 3中的答案:

DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
    self.tableView.scrollToRow(at: IndexPath(row: 0, section: 1), at: .bottom, animated: true)
}

答案 1 :(得分:0)

试试这个:

if self.tempArray.count == 0 {
 }
else{
   let indexPath = NSIndexPath(forRow: tempArray.count - 1, inSection: 0)
    self.tblChat.scrollToRowAtIndexPath(indexPath, atScrollPosition: .Bottom, animated: true)
    }

答案 2 :(得分:0)

我有同样的问题,当我将UITableViewScrollPosition选项从UITableViewRowAnimationBottom设置为UITableViewRowAnimationNone时,神奇的事情,对我来说很好,这里是代码

[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:self.list.count - 1 inSection:0] atScrollPosition:UITableViewScrollPositionNone animated:YES];