上滑隱藏NvaigtionBar,下拉顯示

前言

今天和產品溝通,要仿照一個APP,發現這個APP上滑時隱藏navigationBar,雖然也是隱藏但是效果和其他完全不一樣,因為以前沒見過也沒做過,所以試著去實現一下,Google了一下,發現思路主要還是從KVO來下手。

原APP的效果

2016-08-11 16_23_42.gif

實現過程

  • 主要是給view中的滾動視圖添加一個KVO來監視它的滑動,再根據它的offset來做一下操作,下面是代碼
 [myTableView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:nil];
  • 獲取tableView的contentOffset之后再根據具體需求來實現邏輯判斷
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
    if ([object isEqual:myTableView] && [keyPath isEqualToString:@"contentOffset"]) {
        //獲取新值舊值
        CGFloat newY = [change[@"new"] CGPointValue].y;
        CGFloat oldY = [change[@"old"] CGPointValue].y;
        float i = newY - oldY;//下拉是新值小于舊值的,所以i<0 是下拉 i>0 是上滑
         NSLog(@"%f",myTableView.contentOffset.y);
        if (myTableView.contentOffset.y > -64 && myTableView.contentOffset.y <= 24) {//邊界條件,此處不精確
            if (i <= 0 && _isHide == NO && self.navigationController.navigationBar.frame.origin.y == 20){
                //下拉+bar 已經顯示的狀態,不再移動
                return;
            }
            _isHide = NO;
            //設置navigationbar 的frame 使他根據tableView來滑動
            self.navigationController.navigationBar.frame = CGRectMake(0, -44 - myTableView.contentOffset.y, self.view.bounds.size.width, 44);
            //控制透明度
            self.navigationController.navigationBar.alpha = -myTableView.contentOffset.y/64;
        }else if (myTableView.contentOffset.y > 24) {
            if (i > 10) {//更改數值大小可以控制觸發 navigation bar 的滑動速度
                _isHide = YES;
            }else if(i < -10) {
                _isHide = NO;
            }
        }
        [self.navigationController setNavigationBarHidden:_isHide animated:YES];
    }
}

完成效果圖

2016-08-11 15_55_00.gif

總結

  • 實現起來確實沒有什么難度,主要是因為以前沒有做過,寫這個主要是給大家看一下我的實現過程與思路,希望可以幫到大家。

  • 我把源碼上傳到GitHub了,需要的可以看一下。

  • 我的個人網站

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,466評論 25 708
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,251評論 4 61
  • 深夜提筆難寫意,字字句句我和你。 月下高歌來一曲,風花雪月關乎你。
    瞿靜閱讀 166評論 0 2
  • 大學,到底是一種什么樣的生活狀態?我忽然這樣問自己。我不明白,我現在做的事情有什么意義,或者說,我看不透自己的心,...
    佩玹輕叩閱讀 330評論 0 3
  • 前不久有緣認識了一位“儒商”,之所以稱為“儒商”,是因為這位H先生經營著一家工廠,而且經營的比較精致。但是H先...
    悠云小筑閱讀 323評論 0 2