在 IOS6 我有以下代码滚动到 UITableView 的顶部
[tableView setContentOffset:CGPointZero animated:YES];
在 IOS7 中,这不再起作用。表格视图没有完全滚动到顶部(但几乎)。
在 IOS6 我有以下代码滚动到 UITableView 的顶部
[tableView setContentOffset:CGPointZero animated:YES];
在 IOS7 中,这不再起作用。表格视图没有完全滚动到顶部(但几乎)。
在 iOS7 中,全屏 UITableView 和 UIScrollView 组件默认调整内容和滚动指示器的插入,以使一切正常。但是,正如您所注意到的,CGPointZero 不再代表将您带到视觉“顶部”的内容偏移量。
改用这个:
self.tableView.contentOffset = CGPointMake(0, 0 - self.tableView.contentInset.top);
在这里,您不必担心是否有部分或行。您也没有告诉表格视图以第一行为目标,然后想知道为什么它没有显示所有非常高的表格标题视图等。
试试这个:
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
根据@Markus Johansson 接受的答案,这里是 Swift 代码版本:
func scrollToTop() {
if (self.tableView.numberOfSections > 0 ) {
let top = NSIndexPath(row: Foundation.NSNotFound, section: 0)
self.tableView.scrollToRow(at: top as IndexPath, at: .top, animated: true);
}
}
在此处其他一些答案的帮助下,我设法使其正常工作。为了避免崩溃,我必须首先检查是否有一些部分。如果第一部分没有行,则 NsNotFound 可以用作行索引。希望这应该是放置在 UITableViewController 中的通用函数:
-(void) scrollToTop
{
if ([self numberOfSectionsInTableView:self.tableView] > 0)
{
NSIndexPath* top = [NSIndexPath indexPathForRow:NSNotFound inSection:0];
[self.tableView scrollToRowAtIndexPath:top atScrollPosition:UITableViewScrollPositionTop animated:YES];
}
}
var indexPath = NSIndexPath(forRow: 0, inSection: 0)
self.sampleTableView.scrollToRowAtIndexPath(indexPath,
atScrollPosition: UITableViewScrollPosition.Top, animated: true)
或者
self.sampleTableView.setContentOffset(CGPoint.zero, animated:false)
float systemVersion= [[[UIDevice currentDevice] systemVersion] floatValue];
if(systemVersion >= 7.0f)
{
self.edgesForExtendedLayout=UIRectEdgeNone;
}
viewDidLoad()
在方法中尝试此代码。
这是 idStar在更新的 Swift 3 语法中的答案:
self.tableView.contentOffset = CGPoint(x: 0, y: 0 - self.tableView.contentInset.top)
带动画:
self.tableView.setContentOffset(CGPoint(x: 0, y: 0 - self.tableView.contentInset.top), animated: true)
斯威夫特 3
如果您有表格视图标题 CGPointZero 可能不适合您,但这总是可以滚动到顶部。
self.tableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: UITableViewScrollPosition.top, animated: false)
您仍然可以scrollToRowAtIndexPath:
用于此目的
我意识到这已得到解答,但我只想提供另一种选择:
CGRect frame = {{0, 0},{1, 1}};
[self.tableView scrollRectToVisible:frame animated:YES];
这始终保证 UITableView 将滚动到顶部。接受的答案:
NSIndexPath* top = [NSIndexPath indexPathForRow:NSNotFound inSection:0];
[self.tableView scrollToRowAtIndexPath:top atScrollPosition:UITableViewScrollPositionTop animated:YES];
对我不起作用,因为我滚动到 tableHeaderView 而不是单元格。
scrollRectToVisible
在 iOS 6 和 7 上使用。
Swift 4 UITableViewExtension:
func scrollToTop(animated: Bool) {
if numberOfSections > 0 {
let topIndexPath = IndexPath(row: NSNotFound, section: 0)
scrollToRow(at: topIndexPath, at: .top, animated: animated)
}
}
我迅速使用了:
self.tableView.setContentOffset(CGPointMake(0, 0), animated: true)
但是@Alvin George 的作品很棒