在表格视图中,我必须滚动到顶部。但我不能保证第一个对象是section 0,第0行。可能我的表视图将从第5节开始。
所以当我调用:
[mainTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
有其他方法滚动到表视图的顶部吗?
在表格视图中,我必须滚动到顶部。但我不能保证第一个对象是section 0,第0行。可能我的表视图将从第5节开始。
所以当我调用:
[mainTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
有其他方法滚动到表视图的顶部吗?
当前回答
要在完成时有一个完成,请添加此扩展
// MARK: - UIScrollView
extension UIScrollView {
/// Animate scroll to top with completion
///
/// - Parameters:
/// - duration: TimeInterval
/// - completion: Completion block
func animateScrollToTop(withDuration duration: TimeInterval,
completion: @escaping (()->())) {
UIView.animate(withDuration: duration, animations: { [weak self] in
self?.setContentOffset(CGPoint.zero, animated: false)
}, completion: { finish in
guard finish else {
return
}
completion()
})
}
}
tableView.animateScrollToTop(withDuration: 0.25) {
// Finish
}
其他回答
如果你不想要滚动,你可以启动和停止滚动动画,只要你启动它。
$('document').ready(function() {
$("html, body").animate({ scrollTop: 0 }, 500);
return true;
});
此外,为了使'x'和'y'的值动画化,传入0,0将立即将页面滚动到左上角。
window.scrollTo(x, y);
UITableView是UIScrollView的子类,所以你也可以使用:
[mainTableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];
Or
[mainTableView setContentOffset:CGPointZero animated:YES];
在Swift中:
mainTableView.setContentOffset(CGPointZero, animated:true)
在Swift 3及以上版本中:
mainTableView.setContentOffset(.zero, animated: true)
这是一个简单的UIScrollView扩展的例子,你可以在你的应用程序的任何地方使用。
1)首先你应该创建一个包含滚动方向的枚举:
enum ScrollDirection {
case top, right, bottom, left
func contentOffsetWith(_ scrollView: UIScrollView) -> CGPoint {
var contentOffset = CGPoint.zero
switch self {
case .top:
contentOffset = CGPoint(x: 0, y: -scrollView.contentInset.top)
case .right:
contentOffset = CGPoint(x: scrollView.contentSize.width - scrollView.bounds.size.width, y: 0)
case .bottom:
contentOffset = CGPoint(x: 0, y: scrollView.contentSize.height - scrollView.bounds.size.height)
case .left:
contentOffset = CGPoint(x: -scrollView.contentInset.left, y: 0)
}
return contentOffset
}
}
2)然后添加扩展到UIScrollView:
extension UIScrollView {
func scrollTo(direction: ScrollDirection, animated: Bool = true) {
self.setContentOffset(direction.contentOffsetWith(self), animated: animated)
}
}
3)就是这样!现在你可以使用它:
myScrollView.scrollTo(.top, animated: false)
这个滚动绑定到tableView的内容大小,它看起来比滚动到CGPoint.zero更自然
我使用tabBarController,我有几个节在我的表视图在每个选项卡,所以这是我最好的解决方案。
extension UITableView {
func scrollToTop(){
for index in 0...numberOfSections - 1 {
if numberOfSections > 0 && numberOfRows(inSection: index) > 0 {
scrollToRow(at: IndexPath(row: 0, section: index), at: .top, animated: true)
break
}
if index == numberOfSections - 1 {
setContentOffset(.zero, animated: true)
break
}
}
}
}
使用这段代码在swift中实现UITableview:
var cell = tableView.dequeueReusableCellWithIdentifier(“cell”)
if cell == nil {
cell = UITableViewCell(style: .Value1, reuseIdentifier: “cell”)
}