2013-10-14 13 views
12

Quando si scorre il contenuto in Safari, la barra del titolo si anima in una versione più piccola di sé. Qual è il modo migliore per implementarlo?Animazione di UINavigationBar in iOS 7 (come Safari)

Attualmente, sto cambiando la dimensione del frame in questo modo:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    // 
    // Table view 
    // 
    CGFloat currentPosition = scrollView.contentOffset.y - CGRectGetHeight(self.tableView.tableHeaderView.frame) + CGRectGetHeight(self.navigationController.navigationBar.frame) + CGRectGetHeight([[UIApplication sharedApplication] statusBarFrame]); 

    if ([scrollView isKindOfClass:[HeadlinesHeadlinesTableView class]]) { 
     ScrollDirection scrollDirection; 

     if (self.lastContentOffset > scrollView.contentOffset.y) { 
      scrollDirection = ScrollDirectionDown; 
     } else if (self.lastContentOffset < scrollView.contentOffset.y) { 
      scrollDirection = ScrollDirectionUp; 
     } 

     self.lastContentOffset = scrollView.contentOffset.y; 

     CGRect frame = self.navigationController.navigationBar.frame; 
     CGFloat minimumFrameHeight = 30.0f; 
     CGFloat maximumFrameHeight = 44.0f; 

     CGFloat titleSize = [[self.navigationController.navigationBar.titleTextAttributes objectForKey:NSFontAttributeName] pointSize]; 
     CGFloat minimumTitleHeight = 22.0f; 
     CGFloat maximumTitleHeight = 30.0f; 

     if (currentPosition > 0 && CGRectGetHeight(frame) >= minimumFrameHeight && CGRectGetHeight(frame) <= maximumFrameHeight) { 
      switch (scrollDirection) { 
       case ScrollDirectionUp: 
        frame.size.height--; 
        titleSize--; 
        break; 

       case ScrollDirectionDown: 
        frame.size.height++; 
        titleSize++; 
        break; 

       default: 
        break; 
      } 

      if (CGRectGetHeight(frame) <= minimumFrameHeight) { 
       frame.size.height = minimumFrameHeight; 
      } 

      if (CGRectGetHeight(frame) >= maximumFrameHeight) { 
       frame.size.height = maximumFrameHeight; 
      } 

      if (titleSize <= minimumTitleHeight) { 
       titleSize = minimumTitleHeight; 
      } 

      if (titleSize >= maximumTitleHeight) { 
       titleSize = maximumTitleHeight; 
      } 
     } 

     [self.navigationController.navigationBar setFrame:frame]; 
     [self.navigationController.navigationBar setTitleTextAttributes: @{ NSFontAttributeName : [UIFont fontWithName:@"Canterbury-Regular" size:titleSize] }]; 
    } 
} 

Naturalmente, in questo modo non è liscia e un sacco di codice, per non parlare del fatto che ho bisogno di fade out pulsante della barra articoli pure.

Grazie in anticipo!

+0

Un approccio diverso potrebbe essere invece di utilizzare uibuttons uibarbuttonitem aggiunto alla barra di navigazione e quindi solo pasticciare con l'alpha, ad es. button.alpha = 0.0f; qualcosa del genere .. spero che ti guidi nella giusta direzione :) –

+0

Vedi anche: http://stackoverflow.com/questions/19819165/imitate-ios-7-facebook-hide-show-expanding-contracting-navigation-bar/ –

risposta

5

Dai uno sguardo allo AMScrollingNavbar, ha già il supporto per la dissolvenza. Puoi provare a cambiare la dimensione del carattere di NavigationBar per rendere il titolo più piccolo.

+1

Grazie, funziona! – tuttu47

Problemi correlati