Во время пользовательского перехода элементы панели навигации представления смещаются

У меня есть пользовательский переход, который использует UIViewAnimationOptionTransitionFlipFromLeft для перехода между представлениями.

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

Смещенные элементы панели навигации
Вы можете видеть, что заголовок и две кнопки панели выровнены по левому краю; совершенно не на том месте, где они в конечном итоге будут отдыхать.

Ниже приведен снимок экрана, сделанный после завершения перехода:

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

Представление настраивается в раскадровке. Представление не является частью иерархии UINavigationController, поэтому панель навигации и ее элементы создаются вручную в представлении с помощью инспектора атрибутов «Имитированные показатели» -> «Верхняя панель: полупрозрачная панель навигации».

Как я могу заставить элементы панели навигации располагаться правильно, когда они впервые появляются во время перехода?

Заранее спасибо! :)


person OneManBand    schedule 30.09.2014    source источник


Ответы (1)


Понятно! Я обнаружил, что использование блока [UIView PerformWithoutAnimation:^{}] внутри transitionWithView решило эту проблему:

[UIView transitionWithView:src.navigationController.view duration:0.2
                   options:UIViewAnimationOptionTransitionFlipFromLeft
                animations:^{
                                [UIView performWithoutAnimation:^{
                                    [navController setViewControllers:[NSArray arrayWithObject:dst] animated:NO];
                                }];
                            }
                completion:nil];
person OneManBand    schedule 06.10.2014