2017-06-14 15 views
1

我在UIViewController的底部有一個UITableView,現在tableview的高度是100點。 storyboard如何創建向上/向下滑動UITableView?

tableview有20個單元格,而tableview的標題視圖是100點。我在表格視圖標題中添加了一個UISwipeGestureRecognizer和一個向下的UISwipeGestureRecognizer。

現在我想在向上手勢動作中將tableview height height常量改爲400,並在向下手勢動作中將tableview height height常量改爲100。

minimized

maximized

  • 現在的問題是手勢識別的心不是在tableview中 頭工作已啓用的tableview滾動時。
  • 如果tableview滾動被禁用,那麼手勢識別器是 工作。但一旦桌面高度變爲 就無法查看所有單元格。

回答

3

這裏有不同的方法。根本不要使用滑動手勢識別器。

取而代之,讓桌子總是滿400點高。將其contentInset.top設置爲300.這將允許滾動表格視圖,以便在屏幕底部僅顯示前100個內容點。具體來說,表視圖將允許其contentOffset.y(它的垂直滾動位置)下降到-300(而不是僅下降到0)。該表的內容始終始於y = 0,因此當表格的contentOffset.y爲-300時,其內容的前100個點是可見的。隨着contentOffset.y的增加,更多的內容變得可見。

然後,覆蓋表格視圖的point(inside:withEvent:)方法,僅返回真正的點數爲y >= 0的點。這意味着當內容滾動時,表格會忽略(通過)其內容上方的觸摸,因此只有前100個點可見。

這是一個小桌子,最後的效果:

small table

或一個大表:

big table

你可以找到一個詳細的解釋(在Objective-C)並鏈接到完整的測試項目(也在Objective-C中)in this answer

+1

當你想隱藏它,設置其contentInset.top .................輝煌!!!!!!!!! – Fattie

+0

設置'contentInset.top' ** always **。 'contentOffset.y'(也就是說,它的垂直滾動位置)決定它是否隱藏。我已經更新了我的答案,以便更清楚地瞭解這一點。 –

+0

對,這很清楚。納蒂。 – Fattie

3

因爲它可能會幫助其他人,所以這裏是最簡單的解決方案到這種類型的問題。


非常簡單的解決方案 -

沒有章法,沒有任何幻想 -

有一個 「表視圖頭」。

只是做一個新的UIViewController

class TableWithRedTop: UIViewController 

有...

[ red area .. swipe detection ] 
[ main area - the table view] 

然後簡單地把 'TableWithRedTop' 的容器視圖中。

Container view tutorial if you need one.

在你MainView只是有一個通話的碼

func toggleTableHeight 

當 'TableWithRedTop' 得到了刷卡,已經一行調用toggleTableHeightMainView

注意,在toggleTableHeightMainView中使用容器視圖時,您可以輕鬆地設置高度變化的動畫效果,將角度傾斜,複製或做任何想要的事情。

+0

感謝您的回答。我已經嘗試過使用UIView(redview),UITableview的容器視圖。但是當我滾動tableview時,redview浮動在容器視圖的頂部。 –

+0

啊,你希望它**「走開」*表視圖。這幾乎是不可能的。 – Fattie

0

設置兩個滑動手勢的cancelsTouchesInViewtrue並確保手勢直接添加到標題而不是tableView。

這應該做的伎倆,但因此應增加與手勢視圖識別到容器視圖和它的高度設置它的約束匹配的tableView的頂部,左,右的約束和設定爲100

2

我打算製作另一個建議可能會爲您解決問題。

這可能是你想要的是:

「自我擴張」表...

首先實現無動畫以下,爲簡單起見。

你有兩個高度爲桌子,小和大。

開始在高度小的表。

值得注意的是,你只需要實現這兩個規則:只是兩個簡單的代碼行:


任何時候用戶向上滾動 - 事實上,更改爲「高度大」。

任何時間用戶向下滾動時,你在表的頂部位置(即可以看到小區#1)實際上改變爲「高度小」。


這是那些「太簡單了,很難相信它有效!」的東西之一!

我認爲它有時被稱爲「拉起表」。

(注意:如果你不熟悉的檢測,當用戶滾動,好在它是trivial - code shown here for example。)

+0

順便說一句,因爲這不是字面上的答案,你的優秀問題,不要認爲它的賞金! :) – Fattie