设置 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