修改约束时,表视图不会正确反弹

时间:2015-12-23 02:46:26

标签: ios swift uitableview uiscrollview

我正在实现一个简单的视图,该视图由UIView组成,其下方有一个Table视图。

我实现了scrollViewDidScroll并且我更改了UIView顶部约束,这可以正常工作:

        headerTopConstraint.constant = -scrollY - 65

( - 65是原始约束)

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

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

如果我删除这一行代码,则弹跳效果非常好:http://jmp.sh/AtVYwPy

表视图的顶空空间约束为0到UIView。

1 个答案:

答案 0 :(得分:2)

我认为发生这种情况的原因是因为该行代码会动态更改约束的常量取决于对当前的scrollY值。

现在,我认为这与scrollview的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
}