你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS完成點擊狀況欄主動回到頂部後果詳解

iOS完成點擊狀況欄主動回到頂部後果詳解

編輯:IOS開發綜合

媒介

年夜家都曉得完成狀況欄(statusBar)點擊主動回到頂部後果,旨在為用戶在閱讀界面時供給方便,點擊狀況欄可以或許疾速回到界面頂部,所以重要針對可以轉動的UIScrollView和其子類UITableVIewUICollectionView

這裡將從以下幾個方面完成該功效。

1.蘋果自帶功效

剖析:

起首,蘋果本身曾經供給了該功效,往上滑動tabView,點擊statusBartableView會主動回到初始地位。以下圖所示,此時點擊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.讓最上面的scrollViewscrollsToTop =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能有所贊助,假如有疑問年夜家可以留言交換,感謝年夜家對本站的支撐。

【iOS完成點擊狀況欄主動回到頂部後果詳解】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved