如何防止UITableView向上滚动超过其初始原点?

时间:2018-01-25 08:55:15

标签: ios swift uitableview

目前,我在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之后反弹:

我发现了一些类似的问题:

  1. Stop UITableView over scroll at top & bottom?
  2. Limit the scroll for UITableView
  3. Prevent UITableView scrolling below a certain point
  4. 我已尝试通过停用UITableViewalwaysBounceVertical来尝试建议的变体解决方案,但这只会完全停止滚动,这是我想要的

    由于bouncesUITableView的子类,我一直尝试在条件UIScrollView内设置scrollView.contentOffset = .zero,这也没有帮助。

    如何防止if(sd < 223 )被拉出原始原点,即(0,287)?

    我已经包含了一个示例项目:sample project

0 个答案:

没有答案