2012-04-16 15 views
10

Chciałbym ukryć oba paski po przewijaniu w dół na moim iPhonie. Kiedy przewijam w górę, powinny pojawić się ponownie. Jak mogę sobie z tym poradzić?Xcode/iOS: jak ukryć pasek nawigacyjny i pasek narzędzi po przewinięciu w dół?

+1

Czy próbowałeś użyć 'setToolbarHidden: animated:' i 'setNavigationBarHidden: animated:' w 'scrollViewDidScroll:', gdy wzrasta wartość x 'contentOffset'. – dasdom

+1

Proszę używać języka angielskiego tutaj. To platforma dla ludzi z całego świata. Kiedy zaczynamy mówić po niemiecku, wielu ludzi nie może naśladować. Gdy potrzebujesz porady w języku niemieckim wyślij mi e-mail. Myślę, że aby znaleźć mój adres e-mail nie powinno być trudne z informacjami, które można znaleźć w moim profilu. – dasdom

Odpowiedz

4

Przyjęta odpowiedź nie działa dla mnie, ponieważ scrollViewWillBeginScroll: nie jest metodą delegowaną.

Zamiast zrobić

-(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]; 
} 

Gdziekolwiek w obiektach aplikacja może słuchać tego zgłoszenia, jak

- (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; 
    }]; 
} 

Ten kod będzie ukryć paski dla każdego zwoju. jeśli chcesz mieć tylko na dole, ta sama sztuczka locationOffset jak w zaakceptowanej odpowiedzi powinna zadziałać.

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; 
} 

Uwaga: lastOffset jest CGPoint i idzie w pliku nagłówka: @Interface.

+0

mdominick: co masz na myśli mówiąc "iVar"? – filou

+0

Zmienna instancji. – mdominick

+0

Jestem całkiem nowy: S jak zdefiniować tę zmienną? czy to NSString? – filou

0

Oto moje rozwiązanie w Swift; to działa pięknie

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) 
    } 
} 
0

Można to sprawdzić, dostępny z systemów iOS 8, myślę, że to jest odwrotnością tego, co szukasz ... ale warto sprawdzić, jak to jest coś i to jest standardowe jak Safari działa.

Swift

var hidesBarsOnSwipe: Bool

Cel C

@property (nonatomic, ReadWrite przypisać) Bool hidesBarsOnSwipe Dyskusja

Gdy ta jest ustawiona na TAK , przesunięcie w górę ukrywa pasek nawigacji i pasek narzędzi. Przesunięcie w dół pokazuje ponownie oba paski. Jeśli pasek narzędzi nie ma żadnych elementów, pozostaje widoczny nawet po przesunięciu . Domyślną wartością tej właściwości jest NIE.

Powiązane problemy