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

我正在实现一个简单的视图,它包含UIView,下面有一个Table视图.

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

        headerTopConstraint.constant = -scrollY - 65

(-65是原始约束)

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

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

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

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

最佳答案 我认为发生这种情况的原因是因为该行代码根据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
}
点赞