目前,我在iPhone 7的示例中设置了UITableView
低于UIView
,其来源为(0,287)。
使用以下示例代码实现:
extension ViewController: UIScrollViewDelegate
{
func scrollViewDidScroll(_ scrollView: UIScrollView)
{
if scrollView.contentOffset.y > 0 && imageContainerViewHeightConstraint.constant == 223
{
return
}
if scrollView.contentOffset.y > 0
{
var sd = imageContainerViewHeightConstraint.constant + abs(scrollView.contentOffset.y)
if (sd < 223 )
{
print("path111 1")
self.dataTableView.contentOffset = CGPoint.init(x: 0, y: 0 )
return
}
else
{
imageContainerViewHeightConstraint.constant -= abs(scrollView.contentOffset.y)
}
view.layoutIfNeeded()
self.dataTableView.contentOffset = .zero
return
}
if scrollView.contentOffset.y < 0 && imageContainerViewHeightConstraint.constant >= initialContainerImageViewHeight * 2
{
self.dataTableView.contentOffset = .zero
return
}
else
{
imageContainerViewHeightConstraint.constant += abs(scrollView.contentOffset.y)
view.layoutIfNeeded()
}
}
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool)
{
resetContainerViewSize()
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView)
{
resetContainerViewSize()
}
}
func resetContainerViewSize()
{
imageContainerViewHeightConstraint.constant = initialContainerImageViewHeight
UIView.animate(withDuration: 0.4,
delay: 0.0,
usingSpringWithDamping: 0.7,
initialSpringVelocity: 0.5,
options: .curveEaseInOut,
animations: {
self.view.layoutIfNeeded()
}, completion: nil)
}
如果我慢慢向下滚动,然后慢慢向上滚动,UITableView
将停在原点并且不再向上,并且永远不会进入条件if (sd < 223 )
....就像这样:
但是,如果我向下滚动并快速上拉,一旦标题标题的顶部到达(0,287)的初始原点,UITableView
将向上滚动一点并输入条件{ {1}},因为一旦我放手,if (sd < 223 )
将反弹回到原点......就像这样:
如果我更快地向上移动UITableView
,它会向上滚动更远并在我放开UITableView
之后反弹:
我发现了一些类似的问题:
我已尝试通过停用UITableView
和alwaysBounceVertical
来尝试建议的变体解决方案,但这只会完全停止滚动,这是不我想要的
由于bounces
是UITableView
的子类,我一直尝试在条件UIScrollView
内设置scrollView.contentOffset = .zero
,这也没有帮助。
如何防止if(sd < 223 )
被拉出原始原点,即(0,287)?
我已经包含了一个示例项目:sample project