我有这个表视图,在某些情况下包含很少的行,甚至一行。 有什么不对的是,即使我有一行,它也允许我向下滚动,行被隐藏在顶部。
它实际上几乎从屏幕上消失了,好像它下面会显示一些东西。 我无法禁用滚动,因为我已下拉刷新。
任何想法,如果有我缺少的设置?或者如果我没有足够的行覆盖整个屏幕,我怎么也不能向下滚动?
答案 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
})
}
}
希望这是一个很好的解决方案。