【问题标题】:Table view doesn't bounce correctly when modifying constraints修改约束时表格视图无法正确反弹
【发布时间】:2015-12-23 02:46:25
【问题描述】:

我正在实现一个简单的视图,它由 UIView 和下面的表格视图组成。

我实现了 scrollViewDidScroll 并更改了 UIView 顶部约束,效果很好:

        headerTopConstraint.constant = -scrollY - 65

(-65 是原始约束)

问题是,当以编程方式更改约束常量时,当没有更多内容可向下滚动时,我不会在向下滚动时获得平滑的表格视图反弹。

相反,它只是“尝试”弹跳,但它会立即回到原来的位置。示例:http://jmp.sh/rTBfzCM

如果我只删除那一行代码,弹跳效果很好:http://jmp.sh/AtVYwPy

表格视图对 UIView 的顶部空间约束为 0。

【问题讨论】:

  • 如果使用TableHeaderView而不是单独的UIView会更好。然后根据tableView的contentOffset改变headerView的高度。
  • 抱歉,有什么问题?
  • @Jason 为什么在以编程方式更改顶视图的常量时表格视图没有正确弹跳

标签: ios swift uitableview uiscrollview


【解决方案1】:

我认为发生这种情况的原因是因为那行代码会根据 scrollY 的当前值动态更改约束的常量依赖

现在,我认为这与滚动视图的 y 值相关联。其中,由于“反弹”动画影响了这个值,它也改变了约束的常数。在 您的 特定代码行中,我认为它恰好“取消”了滚动/弹跳的动作,这会导致您看到的奇怪的紧张行为。通过删除该行代码,您实际上是在删除此链接,从而将滚动视图反弹动画从约束效果中释放出来。

您究竟为什么要更改约束的常数?也许尝试不同的公式会得到你想要的结果。


编辑 1 只要 tableView 的可见框架在 tableView 的内容大小范围内,只更新约束的常量怎么样?类似于以下内容(我不知道您的变量名称):

//Check if user has scrolled through all content within tableview
//If not, update constraint constant
if scrollY < self.tableView.contentSize.height - tableView.frame.size.height {
    headerTopConstraint.constant = -scrollY - 65
}

【讨论】:

  • 我正在更改该常量以将顶部 UIView 进一步移到顶部,正如您在此屏幕截图中看到的那样:jmp.sh/rTBfzCM 它工作正常,但不幸的是因为反弹被取消,动画在顶部是“janky”。是否有另一种方法可以移动 UIView 而不会弄乱表格视图的弹跳?
  • 您在 EDIT 1 中的代码似乎可以完美运行,我会做一些额外的测试,很快就会接受答案。谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-04-28
  • 1970-01-01
  • 1970-01-01
  • 2014-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多