10

iPhoneでスクロールダウンすると両方のバーを非表示にしたいと思います。上にスクロールすると、それらが再び表示されるはずです..どうすればこれを処理できますか?

4

4 に答える 4

7
- (void)scrollViewWillBeginScroll :(UIScrollView *)scrollView {
      if (scrollView.contentOffset.y < lastOffset.y) {
                 [toolBar setHidden:YES];
                 [[[self navigationController] navigationBar] setHidden:YES];
      } else{
                 // unhide
      }
}

- (void)scrollViewDidScroll :(UIScrollView *)scrollView {
      /// blah blah
      lastOffset = scrollView.contentOffset;
}

:lastOffsetは でありCGPoint、ヘッダー ファイルに挿入されます: @Interface.

于 2012-04-16T20:30:28.563 に答える
4

scrollViewWillBeginScroll:デリゲートメソッドではないため、受け入れられた回答は機能しません。

代わりに私がします

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    [[NSNotificationCenter defaultCenter] postNotificationName:@"BarsShouldHide" object:self];

}

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView 
                 willDecelerate:(BOOL)decelerate
{
    if(!decelerate)
        [[NSNotificationCenter defaultCenter] postNotificationName:@"BarsShouldUnhide" 
                                                            object:self];
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    [[NSNotificationCenter defaultCenter] postNotificationName:@"BarsShouldUnhide"
                                                        object:self];
}

アプリオブジェクトのどこでも、この通知をリッスンできます。

- (void)viewDidLoad
{
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserverForName:@"BarsShouldHide" 
                                                      object:nil
                                                       queue:nil
                                                  usingBlock:^(NSNotification *note) {
        //hide tab bar with animation;
    }];
    [[NSNotificationCenter defaultCenter] addObserverForName:@"BarsShouldUnhide" 
                                                      object:nil
                                                       queue:nil
                                                  usingBlock:^(NSNotification *note) {
        //Unhide tab bar with animation;
    }];
}

このコードは、スクロールのバーを非表示にします。ダウンだけしたい場合locationOffsetは、受け入れられた回答と同じトリックが機能するはずです。

于 2014-03-10T16:10:21.933 に答える
0

iOS8から入手できるこれをチェックするかもしれません。これはあなたが探しているものの逆だと思います...しかし、それは標準的なものであり、これがSafariの仕組みであるため、チェックする価値があります。

迅速

var hidesBarsOnSwipe: Bool

Objective-C

@property(nonatomic, readwrite, assign) BOOL hidesBarsOnSwipe ディスカッション

このプロパティが YES に設定されている場合、上方向にスワイプすると、ナビゲーション バーとツールバーが非表示になります。下にスワイプすると、両方のバーが再び表示されます。ツールバーに項目がない場合は、スワイプしても表示されたままになります。このプロパティのデフォルト値は NO です。

于 2015-12-08T10:00:27.663 に答える
0

これがSwiftでの私の解決策です。それは美しく動作します

func scrollViewDidScroll(scrollView: UIScrollView) {
    let navController: UINavigationController = self.navigationController!
    if self.collectionView.panGestureRecognizer.translationInView(self.view).y <= 0.0 {
        defaultCenter.postNotificationName("stuffShouldHide", object: self)
    } else {
        defaultCenter.postNotificationName("stuffShouldUnhide", object: self)
    }
}
于 2015-08-08T07:46:17.597 に答える