可以向上滚动具有少量行的Swift表视图

时间:2016-10-07 13:31:46

标签: ios swift uitableview scroll rows

我有这个表视图,在某些情况下包含很少的行,甚至一行。 有什么不对的是,即使我有一行,它也允许我向下滚动,行被隐藏在顶部。

它实际上几乎从屏幕上消失了,好像它下面会显示一些东西。 我无法禁用滚动,因为我已下拉刷新。

任何想法,如果有我缺少的设置?或者如果我没有足够的行覆盖整个屏幕,我怎么也不能向下滚动?

1 个答案:

答案 0 :(得分:1)

实际上,你的情况有点棘手,因为:

第一个我认为解决方案是myTableView.alwaysBounceVertical = false

这将为您完成这项工作,但在您的案例中,您有UIRefreshControl()并将alwaysBounceVertical设置为false的问题将禁用滚动到顶部以显示refreshController。< / p>

因此,应该手动完成,如下所示:

1 - UIScrollViewDelegate实施 scrollViewDidScroll 方法。

2 - 检查其中的滚动方向。

3 - 如果滚动方向下降,请检查tableView的内容大小是否大于其高度,即检查tableView是否包含超过其高度的单元格。

4 - 如果步骤3的输出为false,则禁用滚动,否则启用滚动。

5 - 添加dispatch_after以重新启用tableView滚动。

就像这样(注意:Swift 2代码。):

private var lastContentOffset: CGFloat = 0
    // 1
    func scrollViewDidScroll(scrollView: UIScrollView) {
        // 2
        if (self.lastContentOffset > scrollView.contentOffset.y) {
            print("scrolling up")
        }
        else if (self.lastContentOffset < scrollView.contentOffset.y) {
            print("scrolling down")

            // 3 and 4
            myTableView.scrollEnabled = myTableView.contentSize.height > myTableView.frame.size.height ? true : false

            // 5

            // delaying is half a second
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(NSEC_PER_MSEC) * 500), dispatch_get_main_queue(), { () -> Void in
                self.myTableView.scrollEnabled = true
            })
        }
    }

希望这是一个很好的解决方案。