修改约束时表视图未正确反弹



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

我实现了scrollViewDidSoll,并更改了UIView顶部约束,它运行良好:

        headerTopConstraint.constant = -scrollY - 65

(-65是原始约束)

问题是,当用程序更改约束常数时,当没有更多内容可向下滚动时,我无法在向下滚动时获得平滑的表视图反弹。

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

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

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

我认为发生这种情况的原因是因为这行代码根据当前的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
}

最新更新