2013-02-10 2 views
3

При попытке использовать сдерживание UIViewController от Apple я столкнулся с проблемой анимирования перехода между двумя UIViewControllers.UINavigationBar перескакивает 20 пикселей во время переходаFromViewController

Вот настройка ... Я создал UITabBarController, и на одной из вкладок я создал UIViewController в качестве контейнера. Этот ViewController управляет переходом между UIViewController и UINavigationController. Перед тем мнение:

Display of VC 1

Когда кнопка Далее сливают мнение начинает это переход с переходом flipFromRight. Во время перехода панель навигации находится в «представлении», но расположена на 20 пикселей вниз от верхнего края представления. Изображение ниже:

enter image description here

Зеленый является цветом фона зрения контейнера. После того, как новый вид завершает переход, то панель навигации щелкает до верхней части представления и конечный результат:

Final state

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

Я измерил жизненный цикл viewController и фреймы панели навигации, а UITableView - как указано в XIB. XIB выглядит следующим образом:

xib Configuration of View

Вот код:

В -viewDidLoad -

_fromVC = [[FromVC alloc] initWithNibName:@"FromVC" bundle:nil delegate:self]; 

[self addChildViewController:_fromVC]; 
[self.view addSubview:_fromVC.view]; 
[_fromVC didMoveToParentViewController:self]; 

В моей кнопки обработчик -

- (void)buttonSelected 

{

// 
// Create the "to" View controller 
// 
ToVC *toVC = [[ToVC alloc] initWithNibName:@"ToVC" bundle:nil]; 

// 
// Create the navigation controller for the study activity 
// 
_toNavCon = [[UINavigationController alloc] initWithRootViewController:toVC]; 

[self addChildViewController:_toNavCon]; 
[_fromVC willMoveToParentViewController:nil]; 

[self transitionFromViewController:_fromVC 
        toViewController:_toNavCon 
          duration:0.7 
          options:UIViewAnimationOptionTransitionFlipFromRight 
         animations:nil 
         completion:^(BOOL finished) { 
          [_fromVC removeFromParentViewController]; 
          [_toNavCon didMoveToParentViewController:self]; 
         }]; 

}

Там нет кода в «до» контроллера представления, который изменяет внешний вид контроллера представления.

Еще одна информация ... Когда я переключаю строку состояния вызова в тренажере, зазор в верхней части панели навигации является высотой строки состояния «Входящий звонок».

Я просмотрел все в Интернете и ничего не помогает. Кто-нибудь видел это и кто-нибудь его исправил?

+0

Вы не одиноки. У меня аналогичная проблема с пользовательским контроллером представления содержимого. Пока нет разрешения. – Aaron

+0

Одна вещь: параметр анимации не может быть 'nil' или' NULL' в соответствии с документами. Вместо этого добавьте пустой блок: '^ {}'. Вероятно, это не решит вашу проблему, но это может быть проблемой. – Aaron

+0

Я нашел разрешение ... ответ на подкласс UINavigationController (и UITabBarController)) и override - (BOOL) хочет, чтобы FullScreenLayout возвращал NO. Это устранило мои проблемы. Я также отвечу на вопрос. По-видимому, UINavigationController по умолчанию имеет значение YES, и вы не можете просто установить. Кажется, работает для меня. –

ответ

5

Я нашел ответ! Подкласс UINavigationController и переопределить

- (BOOL)wantsFullScreenLayout{ 

    return NO; 

} 

По-видимому, UINavigationController и UITabController всегда хотят полный экран (по умолчанию ДА) - настройка для строки состояния - и вы не можете установить это свойство любым другим способом. Он работает для меня.

+0

Awesome. Обязательно отметьте свой ответ как «ответ». (Нажмите на зеленую рамку) – Aaron

+0

ПОСЛЕДНИЕ! Я пытался это исправить уже несколько месяцев. Я знаю, что сдвиг происходил где-то между 'viewWillAppear:' и 'viewWillLayoutSubviews:', но я не мог понять, где. Честно говоря, я до сих пор не знаю, где. Спасибо за этот обходной путь. Я только надеюсь, что это не сломает что-то еще по дороге. Думая о позитивных мыслях. :) –

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