2013-10-14 3 views
12

При прокрутке содержимого в Safari строка заголовка оживляет меньшую версию. Каков наилучший способ реализации этого?Анимация UINavigationBar в iOS 7 (например, Safari)

В настоящее время я изменяю размер кадра примерно так:

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

Естественно, этот путь не является гладким и много кода, не говоря уже о том, что мне нужно исчезать кнопки бара также.

Заранее благодарен!

+0

Другой подход может быть вместо использования uibarbuttonitem uibuttons, добавленного в навигационную панель, а затем просто испортить альфа, например. button.alpha = 0.0f; что-то вроде этого. Надеюсь, что это поможет вам в правильном направлении :) –

+0

См. также: http://stackoverflow.com/questions/19819165/imitate-ios-7-facebook-hide-show-expanding-contracting-navigation-bar/ –

ответ

5

Взгляните на AMScrollingNavbar, он уже имеет затухающую поддержку. Вы можете изменить размер шрифта NavigationBar, чтобы уменьшить заголовок.

+1

Спасибо, это работает! – tuttu47

Смежные вопросы