Как создать анимацию сжатия в панели навигации?

#ios #objective-c

Вопрос:

Я использую этот код в objective c для создания анимации затухания, когда пользователь прокручивает uitableview вверх или вниз. Есть ли какой-нибудь способ сделать приятную анимацию, например, медленно уменьшать панель навигации, пока пользователь медленно прокручивает ее вверх? Чем больше он прокручивает вверх, тем больше должна уменьшаться панель навигации.

 -(void)scrollViewDidScroll:(UIScrollView *)scrollView {    CGFloat scrollPos = self.tableView.contentOffset.y ;   if(scrollPos gt;= _currentOffset ){  //hide navbar and fadeout    [UIView animateWithDuration:0.50 animations:^{  [self.navigationController setNavigationBarHidden:YES animated:YES];  self.navigationController.navigationBar.alpha = 0.0f;  }];  } else {  //Slide it up incrementally and fadein, etc.  [UIView animateWithDuration:0.50 animations:^{    [self.navigationController setNavigationBarHidden:NO animated:YES];  self.navigationController.navigationBar.alpha = 1.0f;  }];  } } -(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{  scrollView = self.tableView;  _currentOffset = self.tableView.contentOffset.y; }  

Ответ №1:

Вы не можете настроить размер UINavigationBar самостоятельно. Вы можете только скрыть/отобразить его. Apple не позволяет вам этого делать.

Вы можете использовать UIView вместо этого! Просто спрячьте свой UINavigationBar и поставьте такую же рамку UIView . Поскольку UIView он легко настраивается, вы можете делать все, что захотите.

Комментарии:

1. Таким образом, я не могу уменьшить панель навигации, но могу ли я медленно переместить ее с экрана, а затем вернуть на место при прокрутке вниз?

2. @stefanosn Нет, вы не можете изменить UINavigationBar анимацию по умолчанию.

3. что, если я просто изменю tableviewframe.origin. y на минус 1 он должен отображаться при просмотре? без использования анимации…