设置 UITableView 的内容偏移在滚动时不起作用

Posted

技术标签:

【中文标题】设置 UITableView 的内容偏移在滚动时不起作用【英文标题】:Setting content offset of a UITableView not working when it's scrolling 【发布时间】:2015-04-23 06:33:04 【问题描述】:

这是我的代码

// 1
func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) 
  scrollTableView()


// 2
@IBAction func buttonPressed() 
  scrollTableView()


// 3
func scrollTableView() 
  tableView.setContentOffset(CGPointZero, animated: false)
  // tableView.scrollRectToVisible(CGRect(x: 0, y: 0, width: 1, height: 1), animated:true) // does not work either

即使 方法 1(调用方法 3)被调用,表格视图仍会继续其自然滚动减速直到停止。它不会将自己定位在我想要的位置。

当表格视图不滚动并且我通过按下按钮调用 方法 2 时,它确实设置了它的内容偏移量并定位到它应该定位的位置。

如何通过在方法 1 中调用来使其工作?

谢谢

【问题讨论】:

【参考方案1】:

如果我说对了,以下应该可以工作:

func scrollViewWillBeginDecelerating(scrollView: UIScrollView) 
  scrollTableView()

【讨论】:

我想使用 scrollViewDidEndDragging 因为我希望表格视图在用户抬起手指后立即滚动 我不太确定你想要达到什么目标:) 你能详细解释一下吗? 我希望一旦用户在滚动后抬起手指,表格视图就会滚动到顶部 并且您希望它保持在顶部并取消滚动?【参考方案2】:

你还应该实现scrollViewDidEndDecelerating

scrollViewDidEndDragging: willDecelerate:

scrollViewDidEndDragging: willDecelerate: 总是被调用

工作台减速结束时调用scrollViewDidEndDecelerating

【讨论】:

我想使用 scrollViewDidEndDragging 因为我希望表格视图在用户抬起手指后立即滚动 // 如果用户拖动,则调用手指向上。 decelerate 如果之后继续移动,则为 true - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate; 实现 func stopScroll ( ) CGPoint offset = scrollView.contentOffset;偏移量.x -= 1.0;偏移量.y -= 1.0; [scrollView setContentOffset:offset Animation:NO];偏移量.x += 1.0;偏移量.y += 1.0; [scrollView setContentOffset:offset Animation:NO];并在 scrollViewDidEndDragging: willDecelerate: 方法中调用它 然后调用 scrollTableView() 该函数 stopScroll() 将具有相同的行为:如果表格视图正在滚动,它将不起作用

以上是关于设置 UITableView 的内容偏移在滚动时不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 UICollectionView/UITableView 中为滚动视图的偏移设置动画会导致单元格过早消失

支持 UITableView 的自定义 UIScrollView

UITableView 在滚动时不响应某些触摸

为啥我的 UITableView 滚动偏移在返回其视图时最终落在 UISearchController 后面?

UITableView 滚动跳转

UITableView 不在 UIScrollView 内滚动