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

首頁 > 系統 > iOS > 正文

iOS實現點擊狀態欄自動回到頂部效果詳解

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

前言

大家都知道實現狀態欄(statusBar)點擊自動回到頂部效果,旨在為用戶在瀏覽界面時提供便利,點擊狀態欄能夠快速回到界面頂部,所以主要針對可以滾動的UIScrollView和其子類UITableVIewUICollectionView。

這里將從以下幾個方面實現該功能。

1.蘋果自帶功能

分析:

首先,蘋果自己已經提供了該功能,往上滑動tabView,點擊statusBar,tableView會自動回到初始位置。如下圖所示,此時點擊statusBar,屏幕最上方顯示的將是第一個cell。在一個控制器上添加一個tabView,那么默認點擊statusBar是可以自動回到頂部的。


既然蘋果已經提供了該功能,我們直接拿來用就好了,干嘛還要自己實現呢?

其實不然,在一些情況下該功能是無效的。比如,在窗口上同時存在兩個或兩個以上UIScrollView或其子類時。例如,將上面的tabView先添加到一個scrollView上,然后再將該scrollView添加到控制器的View上,此時點擊statusBar,tabView不能自動回到頂部。

因為,該效果是否有效,與 scrollsToTop屬性相關。查看官方文檔,以下幾點值得注意:

      1.默認情況下scrollsToTop是為YES的,只有當該屬性為YES時,點擊statusBar才有效。

      2.該效果是讓距離statusBar最近的ScrollView自動回到頂部

      3.在iPhone屏幕上方,當存在多個ScrollView(或其子類),如果scrollsToTop= YES ScrollView超過一個,所有ScrollView都不會響應statusBar的點擊。

小結:

從上面分析我們可以得出結論:我們必須保證窗口上scrollsToTop == YESScrollView(及其子類)同一時間內有且只有一個。這一樣才能保證點擊statusBar,該唯一存在的ScrollView能自動回到頂部。

如何保證蘋果自帶的該功能一直好使呢?

解決辦法:我們希望回到頂部的ScrollViewscrollsToTop =YES,其他scrollsToTop = NO

有時,為了滿足某種需求,我們在一個scrollView上面會添加多個TabView,實現上下滑動顯示cell的不同內容,左右滑動可以切換不同的tabView,這時點擊statusBar是沒有效果的。因為所有的scrollViewscrollsToTop =YES。要想展示每個TableView時,點擊statusBar都有效,必須讓除了展示在最上面的TabView以外的所有的ScrollViewscrollsToTop =NO。這就需要去判斷,到底顯示的是哪一個TabView。

參考代碼如下:

1.讓最下面的scrollView,scrollsToTop =NO。其他TableView都是該scrollView的子類。

2.遍歷判斷

 // 控制scrollView的scrollsToTop屬性 for (NSInteger i = 0; i < self.childViewControllers.count; i++) {  UIViewController *childVc = self.childViewControllers[i];  // 如果控制器的view沒有被創建,跳過  if (!childVc.isViewLoaded) continue;  // 如果控制器的view不是scrollView,就跳過  if (![childVc.view isKindOfClass:[UIScrollView class]]) continue;  // 如果控制器的view是scrollView  UIScrollView *scrollView = (UIScrollView *)childVc.view;  scrollView.scrollsToTop = (i == index); }

2.自己實現

statusBar的區域添加一個遮蓋,監聽遮蓋的點擊事件。

UIView

首先我們想到用UIView來做這個遮蓋。但是,在這里我們使用UIView是著不住statusBar的,UIView會一直在statusBar的下面,所以不能接收點擊事件。因為statusBar其實是一個UIWindow,且優先級高于下面的keyWindow。所以,添加的UIView會在statusBar的下面。


UIWindow

由于優先級的關系,我們可以用一個UIWindow來做遮蓋,設置遮蓋window的優先級高于statusBar即可。當然,設置最高優先級(UIWindowLevelAlert)肯定是可以的。然后給遮蓋Window添加一個點擊事件,背景色設置透明即可。


 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{  UIWindow * coverWindow =[[UIWindow alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 20)];  self.coverWindow = coverWindow;  coverWindow.hidden = NO;  coverWindow.backgroundColor = [UIColor redColor];  coverWindow.windowLevel = UIWindowLevelAlert;  //添加手勢  UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(coverWindowClick)];  [self.coverWindow addGestureRecognizer:tap]; });
- (void)coverWindowClick { [UIView animateWithDuration:0.5 animations:^{  self.tableView.contentOffset = CGPointMake(0, 0); }];}

AppDelegate中直接監聽statusBar的點擊

AppDelegate中實現touchesBegan:方法

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {  if ([touches.anyObject locationInView:nil].y > 20) return; [[NSNotificationCenter defaultCenter]postNotificationName:@"click" object:nil];}

接收通知,修改tabViewcontentOffset

- (void)coverWindowClick { [UIView animateWithDuration:0.5 animations:^{  self.tableView.contentOffset = CGPointMake(0, 0); }];}

總結

以上就是這篇文章的全部內容,希望對大家開發IOS能有所幫助,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩成人中文字幕| 欧美极品美女电影一区| 国产91精品久久久久久| 51ⅴ精品国产91久久久久久| 日韩成人av在线播放| 国产女精品视频网站免费| 亚洲wwwav| 91精品国产综合久久香蕉的用户体验| 中文字幕在线视频日韩| 亚洲国产毛片完整版| 久久九九热免费视频| 欧美中文在线字幕| 久久亚洲国产精品成人av秋霞| 国产精品久久97| 日韩美女在线观看一区| 亚洲视频欧美视频| 色哟哟网站入口亚洲精品| 亚洲男人7777| 日韩欧美在线观看| 青草青草久热精品视频在线观看| 国产精品一区二区三区在线播放| 77777少妇光屁股久久一区| 色吧影院999| 国产精品xxx视频| 亚洲香蕉成视频在线观看| 久久不射电影网| 日韩成人中文字幕| 中文字幕亚洲情99在线| 色妞色视频一区二区三区四区| 久久久国产精品视频| 色哟哟网站入口亚洲精品| 色哟哟亚洲精品一区二区| 91在线观看免费观看| 午夜精品久久久久久99热| 26uuu久久噜噜噜噜| 欧美日韩国产第一页| 亚洲jizzjizz日本少妇| 久久久精品欧美| 亚洲免费一级电影| 91中文字幕在线| 不卡中文字幕av| 欧美激情在线一区| 亚洲大尺度美女在线| 久久久久久久久国产| 日韩精品福利在线| 色视频www在线播放国产成人| 中文字幕日本欧美| 久久人人爽人人爽人人片av高请| 欧美激情啊啊啊| 国产有码在线一区二区视频| 国产精品黄色影片导航在线观看| 免费91在线视频| 久久伊人精品一区二区三区| 国产精品27p| 亚洲日本中文字幕| 欧美诱惑福利视频| 久色乳综合思思在线视频| 欧美激情综合色综合啪啪五月| 亚洲人a成www在线影院| 欧美大片大片在线播放| 亚洲在线观看视频| 中文字幕亚洲天堂| 91性高湖久久久久久久久_久久99| 国产精品黄页免费高清在线观看| 国产日韩亚洲欧美| 久久艹在线视频| 国内精品久久久久久影视8| 亚洲精品资源美女情侣酒店| 欧美大秀在线观看| 精品福利视频导航| 亚洲va久久久噜噜噜久久天堂| 精品一区二区三区四区在线| 国产精品网站大全| 91久久在线播放| 日韩精品在线观看视频| 亚洲欧洲av一区二区| 国产成人激情视频| 91精品视频在线| 日韩在线免费视频| 欧美专区中文字幕| 91视频免费网站| 北条麻妃在线一区二区| 成人在线精品视频| 亚洲高清免费观看高清完整版| 8x拔播拔播x8国产精品| 日韩成人小视频| 国产精品青青在线观看爽香蕉| 91成人在线播放| 亚洲人成电影网站| 久久最新资源网| 久热精品视频在线| 久久久精品一区二区三区| 日韩av一区在线观看| 亚洲女人天堂视频| 亚洲色图综合网| 久久69精品久久久久久久电影好| 国产精品第8页| 国产主播在线一区| 国产精品人人做人人爽| 中文字幕精品影院| 国产精品吹潮在线观看| 久久综合久中文字幕青草| 亚洲va欧美va在线观看| 91在线视频免费| 97精品一区二区视频在线观看| 日韩一区在线视频| 国产区精品在线观看| 亚洲天堂av电影| 日韩视频精品在线| 91亚洲精品久久久久久久久久久久| 国产亚洲美女精品久久久| 国产精品自拍网| 日本国产高清不卡| 久久精品国产欧美激情| 国产日韩精品入口| 黑人巨大精品欧美一区二区免费| 中文字幕国产精品| 欧美在线免费视频| 日本精品久久中文字幕佐佐木| 亚洲人成电影在线观看天堂色| 亚洲精品日韩欧美| 欧美性黄网官网| 精品国产鲁一鲁一区二区张丽| 成人性生交大片免费看视频直播| 亚洲天堂影视av| 精品人伦一区二区三区蜜桃网站| 爱福利视频一区| 黄色成人在线免费| 久久久久久久色| 亚洲国产精品va在线看黑人动漫| 日韩在线不卡视频| 欧美大片免费看| 欧美成人在线影院| 国产www精品| 国内精品中文字幕| 欧美性视频网站| 色噜噜狠狠狠综合曰曰曰88av| 欧美成人在线免费视频| 亚洲精品欧美日韩专区| 亚洲精品wwwww| 久久99亚洲精品| 国产精品福利网| 欧洲精品在线视频| 成人国产在线视频| 国产精品美女午夜av| 亚洲天堂av图片| 欧美国产精品人人做人人爱| 欧美激情一区二区三区高清视频| 欧美亚洲免费电影| 日韩av中文字幕在线免费观看| 45www国产精品网站| 亚洲男人的天堂网站| 国产丝袜一区视频在线观看| 国产精品视频99| 91精品国产91久久久久久吃药| 日韩在线视频导航| 国产一区av在线| 欧美日韩国产一区二区| 久久国产精品影视| 国产精品国产自产拍高清av水多| 午夜精品久久久久久久白皮肤| 日韩久久午夜影院| 大胆人体色综合| 中文字幕免费国产精品|