2016-08-29 5 views
0

Appleはこのアイテムを追加しました。これは、アイテムのリスト内を上下にスクロールするときにNavigationBarのhide/showアクションをトリガするのに本当にいいです。UITableViewがUIPageViewControllerに埋め込まれているときに、hidesBarsOnSwipeを使用してNavigationBarを非表示にする方法はありますか?

私は内部に多くのtableViewsを持つUIPageViewControllerを持っています。 私はのUITableViewクラスに次のコードを設定した場合、私は、私は私のUITableViewに/上下にスクロールするときhidesBarsOnSwipeはない全く同じ方法(複数可)残念ながら

にナビゲーションバーを表示/非表示したいと思います:

rootNavViewCtrl?.hidesBarsOnSwipe = true 
    rootNavViewCtrl?.barHideOnSwipeGestureRecognizer.addTarget(self, action: #selector(didHideOnSwipe)) 

    func didHideOnSwipe() { 
    log.debug("==== hide on swipe ====") 
    } 

機能をトリガーしません。私は(私はUIPageViewControllerがジェスチャ認識をトリガ推測)水平スクロールスワイプを開始してからアップ対角線上または下の動きでそれを終了する場合にのみ それが実際に機能をトリガ...

誰もがこのためにクリーンなソリューションがありますか?

答えて

0

このコードをSwiftに変換することができます。私が提供したのはObj-Cの構文です。

のtableViewが含まれているあなたのビューコントローラの内部では、いくつかのUIScrollViewのデリゲートを上書き:

BOOL canHideOrShowNavBar; 
NSInteger lastContentOffset; 

#pragma mark - UIScrollView Delegate 
-(void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    if (self.lastContentOffset > scrollView.contentOffset.y && canHideOrShowNavBar){ 
     if(self.parentViewController.navigationController.navigationBarHidden){ 
      [self.parentViewController.navigationController setNavigationBarHidden:NO animated:YES]; 
     } 
    }else if (self.lastContentOffset < scrollView.contentOffset.y && canHideOrShowNavBar){ 
     if(!self.parentViewController.navigationController.navigationBarHidden){ 
      [self.parentViewController.navigationController setNavigationBarHidden:YES animated:YES]; 
     } 
    } 
    self.lastContentOffset = scrollView.contentOffset.y; 
} 

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { 
    canHideOrShowNavBar = YES; 
} 

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView 
       withVelocity:(CGPoint)velocity 
      targetContentOffset:(inout CGPoint *)targetContentOffset { 
    canHideOrShowNavBar = NO; 
} 

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView { 
    if([self.parentViewController.navigationController isNavigationBarHidden]) 
     [self.parentViewController.navigationController setNavigationBarHidden:NO animated:YES]; 
    return YES; 
} 

あなたものUITableViewを持ってUIPageViewControllerで複数のビューコントローラを持っている場合は、あなたがあなたのベースのUIViewControllerのサブクラスでこれらのコードを置くことができます冗長性を防ぐ。同時に


、私は誰かがのUITableViewはUIPageViewControllerでchildViewController内にあるときhidesBarsOnSwipeが機能しない理由には、あまりにも私を啓発することができます願っています。

UINavigationController //Initiate 
    | 
UIPageViewController 
    |     |     | 
UIViewControllerA UIViewControllerB UIViewControllerC 
    |    ↘ 
UITableView // <self.navigationController.canHideOrShowNavBar = YES; is not working when scrolling UITableView> 
関連する問題