Заголовок панели навигации прыгает сразу после флип-перехода - PullRequest
2 голосов
/ 09 февраля 2012

У меня есть простой UIViewController с простым представлением.В результате взаимодействия с пользователем создается новый UINavigationViewController, и его представление добавляется в качестве подпредставления к представлению UIViewController.Это происходит как часть анимационного перехода (флип).

Это работает довольно хорошо, и первое представление переворачивается в пользу второго.Но когда анимация заканчивается (представление UINavigationViewController заполняет весь экран) элементы панели навигации перепрыгивают, то есть заголовок перемещается примерно на 5-10 пикселей справа налево, кнопки переключаются в зависимости от того, с какой стороны (слева / справа)они расположены.Во время анимации вы можете видеть, что кнопки смещены и что прыжковое движение является своего рода перестановкой.

Может кто-нибудь сказать мне причину этого и дать мне несколько советов, как этого избежать?

Ответы [ 4 ]

3 голосов
/ 23 сентября 2014

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

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

Ожидается, что в конце окна приложения будет корневой контроллер представлениязапуска приложения

Изменение делегата приложения следующим образом недавно исправило проблему для меня:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Other logic goes here
    // ...

    self.window.rootViewController = myRootViewController; // This was missing

    [self.window makeKeyAndVisible];
    return YES;
}

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

1 голос
/ 06 октября 2014

У меня недавно была проблема, которая звучит идентично тому, что вы испытывали.Я обнаружил, что использование блока [UIView performWithoutAnimation:^{}] внутри transitionWithView исправило его.

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

1 голос
/ 05 декабря 2012

Это может быть вызвано частично поврежденными PNG, используемыми для кнопок панели навигации, когда UIImages являются resizableWithEdgeInsets :.Если вы используете пользовательские изображения элементов кнопок, попробуйте экспортировать их снова, используя методы, которые, как известно, позволяют получать надежные изображения (для хорошего начала см. Сообщения в блоге Марка Эдвардса в Bjango).

1 голос
/ 09 февраля 2012

Я знаю, что это раздражает, но я понятия не имею, почему это происходит, но по моему опыту, это происходит в одном из двух случаев:

  1. Полупрозрачная навигация. Возможно, что-тоделать с тем фактом, что полупрозрачный навигационный бар иногда устанавливает свойство viewsFullScreen представления (представление затем расширяется ниже навигационной панели).

  2. Во время переходов: как вы описали.

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

ИЛИ

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

...