一個巧妙的實現懸浮的tableViewHeader的方法,tableheaderview懸浮

來源:互聯網
上載者:User

一個巧妙的實現懸浮的tableViewHeader的方法,tableheaderview懸浮
之前因為工作需要要實現一個類似的懸浮+視差的headerView的效果,研究了好久沒研究出來怎麼做,最後用UICollectionView + CSStickyHeaderFlowLayout的方法實現了(不得不說CSStickyHeaderFlowLayout真的是一個很強大的庫,作者對UICollectionView的理解真的是深刻,建議有空一定要看一下他的源碼)。唯一有點小不爽的是我用了一個UICollectionView來實現了一個UITableView。。。 後來在gitHub上受ARSegmentPager啟發,發現了另外一種巧妙的思路,也可以比較好的實現這種效果,而且用UITableView就可以實現,實現方式也比較簡單,還可以做更多的擴充,所以趕緊記錄一下。 這個思路的核心就是:     將自訂的headerView放在tabView 的上面,而不是作為tableView.tableHeaderView(即headerView和tableView平級,都添加到viewController的view上),然後設定tableView的contentInset為合適的值,在tableView滑動的時候,動態改變view的位置或者大小,使這個headerView看起來就像是有了懸浮功能的tableView.tableHeaderView。 我原來老想著利用在tableView的內部做點什麼來實現這個功能,而這個方法讓我跳出了定式思維,把headerView放在外面,可就想怎麼變就怎麼變了!!!(而且如果不提前說,幾乎看不出來這不是tableHeaderView)比如說這樣:或者這樣:再或者這樣: 當然,還可以做更多炫酷的效果,我這兒只是幾個最簡單最容易實現的。具體demo地址在這裡:https://github.com/Phelthas/TEST_XMLCommon 玩過以後你可能也發現問題了,這個只有手指在tableView上的時候才能滑動,在headerView上就不行了。。。。。。這肯定不能忍了,所以需要想個辦法可以讓tableView的手勢可以透過這個自訂的headerView,而這個方法,就是重載headerView的hitTest方法。(代碼我已經更新到gitHub上了) hitTest具體機制及原理可以google百度,大概的作用就是控制UIEvent的傳遞,返回應該由哪個view來響應事件。因為這個事件的傳遞是由頂層向下傳遞的,所以add到headerView之上的view會優先響應其自己的事件,所以headerView上的button之類的subView都不會受到影響(但是add到headerView上的手勢就不行了,如果有需要,可以在headerView上add一個等大小的subView,把手勢加到這個subView上)。所以這個方法hitTest方法在這裡還是很好用的~~~ 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.