最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS實現(xiàn)頂部標簽式導航欄及下拉分類菜單

 更新時間:2020年04月20日 11:39:01   作者:hou0716  
這篇文章主要為大家詳細介紹了iOS實現(xiàn)頂部標簽式導航欄及下拉分類菜單的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了iOS實現(xiàn)頂部標簽式導航欄及下拉分類菜單的全部過程,供大家參考,具體內(nèi)容如下

當內(nèi)容及分類較多時,往往采用頂部標簽式導航欄,例如網(wǎng)易新聞客戶端的頂部分類導航,最近剛好有這樣的應(yīng)用場景,參考網(wǎng)絡(luò)上一些demo,實現(xiàn)了這種導航效果,記錄一些要點。

效果圖(由于視頻轉(zhuǎn)GIF掉幀,滑動和下拉動畫顯得比較生硬,剛發(fā)現(xiàn)quickTime可以直接錄制手機視頻,推薦一下,很方便)

1.頂部標簽式導航欄

(1)實現(xiàn)思路

其實就是在上下兩個UIScrollView上做文章,實現(xiàn)聯(lián)動選擇切換的效果。

①頂部標簽導航欄topCategoryListScrollView加載顯示分類數(shù)據(jù),下方contentScrollView顯示分類對應(yīng)的內(nèi)容,選擇頂部標簽后,內(nèi)容視圖contentScrollView切換到對應(yīng)視圖。同樣,滑動下方內(nèi)容視圖,標簽欄滑動到指定分類并居中顯示,若分類初始位置在導航欄最左側(cè)或最右側(cè),則不用滑動到中間位置。以免兩側(cè)留出一段空白。

②頂部導航欄可以用label或button來代表分類,這里用的是label,添加了一個tap手勢響應(yīng)交互事件,將分類抽取為一個model,包含分類名稱、對應(yīng)內(nèi)容視圖特有的id或url及分類名稱長度(分類下方的下劃線長度隨名稱長度變化)等屬性,根據(jù)分類的多少,決定下方內(nèi)容視圖的contentSize,再將分類順序與內(nèi)容順序?qū)?yīng)起來,在交互邏輯中實現(xiàn)聯(lián)動切換。

③點擊右側(cè)按鈕,彈出下拉菜單,也可切換分類。

(2)iOS7上Autolayout的問題

由于iOS7的Autolayout與iOS8、9的差異,在iOS7上UIScrollView的contentsize及一些使用Autolayout的UIView動畫效果會有問題,所以建議使用setFrame的方式來實現(xiàn)兩個頂部導航欄及下拉菜單的UI效果。

(3)頂部導航欄

遍歷分類數(shù)據(jù),往頂部導航欄添加label。需要注意以下幾點:

①設(shè)置label的tag,與分類數(shù)據(jù)的index對應(yīng),方便后續(xù)根據(jù)標識進行切換選擇;

②label的userInteractionEnabled默認為NO,需要設(shè)置一下,方便響應(yīng)tap點擊操作;

③分類名稱長度是動態(tài)的,如果超出默認長度則根據(jù)實際長度顯示,包括label的長度及l(fā)abel底部下劃線長度,所以分類數(shù)據(jù)對應(yīng)的model里需要有一個長度屬性,用來記錄此長度,方便后續(xù)顯示,而不用實時去計算長度。

分類名稱底部的下劃線隨著分類label走,默認選中第一個label,所以下劃線默認也是停留在第一個,并且根據(jù)分類數(shù)量設(shè)置好頂部導航欄的contentSize。

(4)內(nèi)容視圖

同樣根據(jù)分類數(shù)量設(shè)置好內(nèi)容視圖的contentSize

(5)兩個scrollView之間的交互邏輯

兩個scrollView之間的聯(lián)動需要注意單向傳遞,避免發(fā)生重復滑動。這里的滑動選擇操作就三種情況:

①選擇某個分類標簽,導航欄滑動到指定位置,內(nèi)容視圖滑動到指定位置;

②滑動內(nèi)容視圖,導航欄也切換滑動到對應(yīng)分類標簽位置;

③在下拉菜單中選擇了某個分類,導航欄和內(nèi)容視圖滑動到對應(yīng)位置,實際與①一樣。

這里先說第一種情況,點擊導航欄的分類標簽,則block回調(diào)到controller里

先讓contentScrollView滑動到指定位置,再通知topCategoryListScrollView滑動。

這里需要說明一下,scrollViewDidEndScrollingAnimation原本是內(nèi)容視圖滑動結(jié)束后調(diào)用,用來通知導航欄滑動到對應(yīng)分類標簽。scrollViewDidEndDecelerating是處理手指在屏幕上滑動內(nèi)容視圖結(jié)束后調(diào)用,也是通知導航欄滑動到對應(yīng)分類標簽。但是為了讓滑動時分類標簽切換顯示效果更更連貫,在scrollViewDidScroll里進行了處理,當滑出一定距離,新的index與當前index不一致時就通知導航欄切換分類標簽,實際上scrollViewDidEndScrollingAnimation和scrollViewDidEndDecelerating這時已經(jīng)可以去掉了。

類似的,第二種情況,滑動內(nèi)容視圖,導航欄切換滑動到對應(yīng)分類標簽位置,實際就是在ScrollViewDidScroll中進行判斷處理的。

對于第三種情況,下拉菜單中選擇分類,實際過程與第一種情況一樣。

需要注意的是切換分類時,需要記錄更新當前分類的值,彈出下拉菜單的時候,才能標識高亮當前分類。

導航欄滑動的時候,需要針對分類標簽的具體位置,決定是否滑動,以及滑動距離,并根據(jù)分類名稱長度更新下劃線的長度

2.下拉分類菜單

(1)使用場景及方式

下拉逐漸展開分類菜單,選擇某一個分類,導航欄和內(nèi)容視圖切換到對應(yīng)分類及內(nèi)容,展開狀態(tài)時,點擊按鈕或者背景陰影區(qū)域逐漸收起菜單。

(2)UI元素分解

一個放在導航欄旁邊的按鈕dropDownButton,一個titleView,以及下拉分類菜單dropDownCategoryListView,里面包含一個collectionView展示分類數(shù),據(jù)。dropDownButton控制titleView及dropDownCategoryListView的顯示,dropDownCategoryListView背景色設(shè)置一定透明度做背景。接下來總結(jié)一下幾個關(guān)鍵點。

(3)collectionView高度控制及分隔線效果

這里每一行顯示三個分類數(shù)據(jù),分類數(shù)量及cell高度確定后即可確定collectionView的高度,即先確定縱向有幾行分類數(shù)據(jù),行數(shù)xcell高度就是collectionView 高度。

對于分類cell的分隔線效果,可能最容易想到的就是cell之間留出間隙,collectionView背景色設(shè)置一下就行了,但是這里有兩個問題,首先是三等分cell加上留出的間隙,間隙的寬度會帶有小數(shù),顯示出來的效果粗細不均,并且這里cell與collectionview背景色都為白色,留出空隙也無法形成分隔線的視覺效果,所以只能在cell內(nèi)部處理,底部和右側(cè)加分隔線,根據(jù)cell所處位置控制分隔線顯示與否。

(4)點擊collectionView的事件處理

dropDownCategoryListView添加了tap手勢,點擊view則通知controller收起移除下拉分類菜單 ,collectionView作為一部分,點擊collectionView也會通知controller收起移除下拉分類菜單,顯然不符合要求,解決辦法是將手勢的cancelsTouchesInView屬性設(shè)為NO,即將touch事件也傳遞到collectionView上,didSelect選中分類后繼續(xù)處理即可。

(5)交互效果處理

下拉菜單的展開和收起漸變效果用UIView的animation即可,需要注意的是收起動畫效果,需要先去掉陰影,然后收起下拉菜單,這里的陰影其實就是dropDownCategoryListView設(shè)置了一定透明度的背景色,所以先將背景色設(shè)成clearColor再收起菜單即可。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助。

相關(guān)文章

最新評論

旺苍县| 武平县| 馆陶县| 建德市| 革吉县| 会昌县| 南开区| 深圳市| 新宁县| 鹿泉市| 定西市| 宁河县| 新泰市| 潢川县| 石屏县| 梁河县| 山东| 杭锦后旗| 平安县| 云龙县| 烟台市| 河北省| 金山区| 廊坊市| 皋兰县| 云南省| 如皋市| 昌吉市| 页游| 封丘县| 察哈| 垣曲县| 枞阳县| 岳西县| 信丰县| 宜良县| 越西县| 拜城县| 平昌县| 丁青县| 莫力|