亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS實現頂部標簽式導航欄及下拉分類菜單

2020-07-26 03:25:51
字體:
來源:轉載
供稿:網友

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

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

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

1.頂部標簽式導航欄

(1)實現思路

其實就是在上下兩個UIScrollView上做文章,實現聯動選擇切換的效果。

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

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

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

(2)iOS7上Autolayout的問題

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

(3)頂部導航欄

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

①設置label的tag,與分類數據的index對應,方便后續根據標識進行切換選擇;

②label的userInteractionEnabled默認為NO,需要設置一下,方便響應tap點擊操作;

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

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

(4)內容視圖

同樣根據分類數量設置好內容視圖的contentSize

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

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

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

②滑動內容視圖,導航欄也切換滑動到對應分類標簽位置;

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

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

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

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

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

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

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

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

2.下拉分類菜單

(1)使用場景及方式

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

(2)UI元素分解

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

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

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

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

(4)點擊collectionView的事件處理

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

(5)交互效果處理

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品一区精品二区| www.久久色.com| 久久久久久久久网站| xxxx性欧美| 欧美成人第一页| 国产成人自拍视频在线观看| 91精品综合久久久久久五月天| 97精品国产91久久久久久| 成人激情视频在线| 在线观看日韩专区| 欧美综合激情网| 中文字幕成人精品久久不卡| 亚洲第一福利网| 国产91精品久久久久久久| 国产在线不卡精品| 亚洲九九九在线观看| 欧美亚洲视频一区二区| 色综合久久精品亚洲国产| 亚洲国产精品高清久久久| 91在线观看免费观看| 日韩中文在线视频| 久久综合电影一区| 久久精品国产综合| 萌白酱国产一区二区| 国产精品久久久久久久久免费| 在线日韩精品视频| 2019中文字幕在线免费观看| 中文字幕一区电影| 国产精品高潮呻吟久久av黑人| 久久精品国产96久久久香蕉| 不卡中文字幕av| 亚洲欧洲黄色网| 亚洲福利在线看| 国产成人亚洲综合91| 精品伊人久久97| 爽爽爽爽爽爽爽成人免费观看| 亚洲美女又黄又爽在线观看| 色悠悠国产精品| 日韩美女视频中文字幕| 精品亚洲一区二区三区在线播放| 日韩美女视频免费看| 国产精品老牛影院在线观看| 久久久99久久精品女同性| 欧美日韩在线视频一区| 亚洲天堂av女优| 97在线视频免费看| 亚洲性av在线| 国产69精品久久久久9999| 91精品国产91久久久久久不卡| 欧美日韩国产成人在线| 国产在线精品自拍| 91亚洲精品在线| 国产精品亚洲激情| 精品亚洲一区二区三区| 日本一区二区三区四区视频| 亚洲精品国产精品国自产在线| 欧美精品一区在线播放| 成人亚洲激情网| 亚洲色图色老头| 国内揄拍国内精品| 国产精品99导航| 色偷偷偷亚洲综合网另类| 日韩激情视频在线| 国产精品亚洲网站| 日本亚洲欧洲色α| 亚洲第一级黄色片| 一本一本久久a久久精品牛牛影视| 国产精品久久久久福利| 国产精品国产三级国产aⅴ9色| 亚洲激情视频网站| 精品久久久免费| 久久精品中文字幕免费mv| 91精品视频一区| 精品久久香蕉国产线看观看gif| 中文字幕日韩在线观看| 久久精品国产v日韩v亚洲| 国产乱人伦真实精品视频| 日韩h在线观看| 欧美日韩国产一区二区| 日韩av电影免费观看高清| 伦理中文字幕亚洲| 成人美女av在线直播| 91地址最新发布| 欧美午夜xxx| 欧美黑人性猛交| 日韩中文字幕av| 欧美丰满少妇xxxxx| 日韩电影中文字幕| 亚洲一区二区三区久久| 91地址最新发布| 国产精品一久久香蕉国产线看观看| 亚洲综合小说区| 色青青草原桃花久久综合| 亚洲日韩欧美视频一区| 亚洲缚视频在线观看| 欧美性猛交xxxx黑人| 国产精品青草久久久久福利99| 久久久精品一区| 久久在线免费观看视频| 久久久久久久一区二区三区| 午夜精品久久久久久久久久久久久| 北条麻妃在线一区二区| 欧美男插女视频| 欧美丝袜一区二区三区| 色多多国产成人永久免费网站| 欧美自拍视频在线| 亚洲精品在线视频| 亚洲加勒比久久88色综合| 国产精品a久久久久久| 性欧美在线看片a免费观看| 亚洲第一视频在线观看| 欧美大片va欧美在线播放| 亚洲精品美女久久| 亚洲自拍偷拍色片视频| 中文字幕亚洲欧美日韩在线不卡| 欧美资源在线观看| 欧美成人精品一区二区| 在线观看精品国产视频| 中文字幕精品一区二区精品| 日韩av在线天堂网| 欧美特级www| 精品日本美女福利在线观看| 欧美精品videossex88| 国产精品网站视频| 久久不射电影网| 日韩久久免费电影| 国产亚洲欧美日韩一区二区| 免费99精品国产自在在线| 欧美三级免费观看| 亚洲欧美日韩中文在线| 中文字幕日韩免费视频| 精品亚洲精品福利线在观看| 亚洲人高潮女人毛茸茸| 另类色图亚洲色图| 亚洲九九九在线观看| 国产91露脸中文字幕在线| 亚洲第一页中文字幕| 亚洲精品色婷婷福利天堂| 日韩av免费网站| 色偷偷噜噜噜亚洲男人的天堂| 91亚洲精品久久久| 91精品国产99久久久久久| 精品久久久国产精品999| 国产精品88a∨| 亚洲精品一区av在线播放| 亚洲美女性视频| 日韩一二三在线视频播| 欧美激情精品久久久| 国产精品久久久久久久久借妻| 国产综合视频在线观看| 国产免费一区视频观看免费| 中文字幕亚洲在线| 国产日本欧美一区二区三区在线| 亚洲第一视频在线观看| 91国产美女视频| 国产xxx69麻豆国语对白| 亚洲精品aⅴ中文字幕乱码| 97超级碰碰碰久久久| 亚洲欧洲av一区二区| 欧美精品做受xxx性少妇| 成人国产精品免费视频| 久久精品亚洲精品| 色先锋资源久久综合5566| 日韩在线观看免费高清完整版|