[英]Swift table view with few rows can be scrolled up
我有這個表視圖,在某些情況下它包含幾行,甚至一行。 它有什么問題,即使我只有一行,它也允許我向下滾動並且該行隱藏在頂部。
它幾乎從屏幕上消失了,就好像它下面有什么東西要顯示一樣。 我無法禁用滾動,因為我已經下拉刷新。
如果有我缺少的設置,有什么想法嗎? 或者如果我沒有足夠的行來覆蓋整個屏幕,我怎么不允許向下滾動?
實際上,您的情況有點棘手,因為:
第一個我認為解決方案將是myTableView.alwaysBounceVertical = false
這將為您完成這項工作,但是在您有UIRefreshControl()
並將alwaysBounceVertical
設置為false
的情況下,問題將禁用滾動到頂部以顯示 refreshController。
因此,應該手動完成,如下所示:
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
})
}
}
希望這對您的情況是一個很好的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.