Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Навигационная панель прыгает при загрузке вида

Автор вопроса: CSharpLearningОтветов: 3

Я реализовал контроллер представления контейнера (ios5), и теперь я пытаюсь реализовать пользовательские анимации/переходы для переключения контроллеров представления.

Но у меня есть проблема при реализации любой анимации, в которой используется UINavigationController, результат не такой, как ожидалось. Например, если я выполняю переворот левой анимации при отображении контроллера с панелью навигации, положение панели навигации остается на 44 пикселя ниже исходного положения, и после выполнения анимации панель навигации плавно перемещается в исходное положение, которое на самом деле уродливый...

Это происходит с каждой анимацией, которую я выполняю, поэтому я думаю, что это должно быть связано только с навигационным контроллером.

Это код, который я использую для флип-перехода

[self transitionFromViewController:fromViewController
                toViewController:toViewController
                        duration:1.0
                         options:UIViewAnimationOptionTransitionNone
                      animations:^{
                        [UIView beginAnimations:@"animation2" context:nil];
                        [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
                        [UIView setAnimationDuration: 0.7];
                        [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:containerView cache:NO];
                        [UIView commitAnimations];
                      }
                      completion:^(BOOL finished) {
                        [toViewController didMoveToParentViewController:self];
                        [fromViewController removeFromParentViewController];
                      }];

Я также пробовал следующее

[self transitionFromViewController:fromViewController
                toViewController:toViewController
                        duration:1.0
                         options:UIViewAnimationOptionTransitionFlipFromLeft
                      animations:^{
                      }
                      completion:^(BOOL finished) {
                        [toViewController didMoveToParentViewController:self];
                        [fromViewController removeFromParentViewController];
                      }];

iosiphoneuinavigationcontrolleruinavigationbarcore-animation

Ответы

Ответ 1 · Paresh Navadiya

Установите рамку панели навигации в соответствии с iphone или ipad и ее ориентацию, как это для портрета в iphone

 [self.navigationController.navigationBar setFrame:CGRectMake(0, 20, 320, 44)]; //for iphone  simarly for ipad and its orientation

Вам нужно изменить рамку панели навигации на ее фактическое положение в строке состояния, т.е. плюс 20

Ответ 2 · goldenhordes

У меня похожая проблема с NavigationController и Container controller. На самом деле это была панель инструментов в нижней части окна. Мое решение состоит в том, чтобы сначала скрыть панель инструментов, а затем показать панель инструментов с анимацией после завершения основного перехода. Это похоже на часть всей анимации.

Вот как я скрываю и показываю панель инструментов:

[toNavController setToolbarHidden:YES];
[self transitionFromViewController:fromViewController
                toViewController:toNavController
                        duration:1.0
                         options:UIViewAnimationOptionTransitionFlipFromLeft
                      animations:^{
                      }
                      completion:^(BOOL finished) {
                        [toNavController didMoveToParentViewController:self];
                        [fromViewController removeFromParentViewController];

                        [toNavController setToolbarHidden:NO animated:YES];
                      }];

Ответ 3 · VOX

В viewDidLoad установите для frame.origin.y значение 1. У вас все еще есть прыжки, но с 1 пикселем.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы