Ios 可以向上滚动包含少量行的Swift表格视图

Ios 可以向上滚动包含少量行的Swift表格视图,ios,swift,uitableview,scroll,rows,Ios,Swift,Uitableview,Scroll,Rows,我有一个表视图,在某些情况下,它包含很少的行,甚至一行。 它的问题是,即使我有一行,它也允许我向下滚动,并且该行在顶部隐藏 它几乎从屏幕上消失了,好像下面有什么东西可以显示。 我无法禁用滚动,因为我已下拉刷新 如果我错过了一个场景,你有什么想法吗?或者,如果没有足够的行覆盖整个屏幕,我怎么能不允许向下滚动呢?事实上,您的案例有点棘手,因为: 首先,我认为解决方案是myTableView.alwaysBounceVertical=false 这将为您完成这项工作,但您的问题是,您有一个UIRefr

我有一个表视图,在某些情况下,它包含很少的行,甚至一行。 它的问题是,即使我有一行,它也允许我向下滚动,并且该行在顶部隐藏

它几乎从屏幕上消失了,好像下面有什么东西可以显示。 我无法禁用滚动,因为我已下拉刷新


如果我错过了一个场景,你有什么想法吗?或者,如果没有足够的行覆盖整个屏幕,我怎么能不允许向下滚动呢?

事实上,您的案例有点棘手,因为:

首先,我认为解决方案是
myTableView.alwaysBounceVertical=false

这将为您完成这项工作,但您的问题是,您有一个
UIRefreshControl()
并将
alwaysBounceVertical
设置为
false
将禁用滚动到顶部以显示refreshController

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

1-
UIScrollViewDelegate
实现scrollViewDidScroll方法

2-检查其中的滚动方向

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

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

5-
之后添加
dispatch\u以重新启用tableView滚动

它是这样的(注:Swift 2代码):

private var lastContentOffset:CGFloat=0
// 1
func scrollViewDidScroll(scrollView:UIScrollView){
// 2
if(self.lastContentOffset>scrollView.contentOffset.y){
打印(“向上滚动”)
}
else if(self.lastContentOffsetmyTableView.frame.size.height?真:假
// 5
//延迟是半秒
调度后(调度时间(现在调度时间,Int64(每毫秒NSEC)*500),调度获取主队列(),{()->Void in
self.myTableView.scrollEnabled=true
})
}
}

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

实际上它被称为
tableView断言失败
。如果您检查日志,您将看到这一点。问题是您试图以不正确的方式更新
tableView
datasource
。@New16我查找了“tableView断言失败”。这看起来像是一个错误,终止了应用程序会话,我没有得到它。由于我无法找到一个不会导致错误的“tableView断言失败”示例,您能否帮助我了解更多详细信息?感谢您抽出时间准确地考虑情况并进行如此详细的解释。你的解决方案对我非常有效。我将把你的代码放在这里,其中有一些小的更新,因为出现了一些错误。if(self.lastContentOffset>scrollView.contentOffset.y){}else if(self.lastContentOffsettableView.frame.size.height?true:false让dispatchTime:dispatchTime=dispatchTime.now()+Double(Int64(0.1*Double(NSEC_PER_SEC))/Double(NSEC_PER_SEC)DispatchQueue.main.asyncAfter(截止日期:dispatchTime,执行:{self.tableView.isScrolEnabled=true}我已经接受了您的答案,但如果您可以,请使用我所做的小更改对其进行更新,以便对其他人有所帮助。我很乐意提供帮助:)。您正在使用swift 3,因此我建议添加一个通过swift 3编码的答案,并注意,对于swift 3用户,这是相同的答案。
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
            })
        }
    }