Запретить UINavigationBar popViewController анимацию - PullRequest
3 голосов
/ 16 декабря 2011

У меня следующая проблема: я переопределил popViewControllerAnimated:(BOOL)animated из UINavigationController, потому что я хотел бы иметь собственную анимацию.Код выглядит следующим образом:

- (UIViewController *)popViewControllerAnimated:(BOOL)animated 
{
    UIViewController *poppedCtrl = [super popViewControllerAnimated:NO];
    [((customViewController *) self.topViewController) doCustomAnimation];
    return poppedCtrl;
}

К сожалению, UINavigationBar, кажется, игнорирует то, что я явно отключаю встроенную анимацию, и она все еще анимирована.

Что мне нужно сделать, чтобытакже запретить анимацию панели навигации?

Ответы [ 2 ]

11 голосов
/ 22 декабря 2011

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

Для предотвращения анимирования панели навигации недостаточно переопределить (UIViewController *)popViewControllerAnimated:(BOOL)animated.

Также необходимо создать пользовательскую панель навигации и переопределить (UINavigationItem *)popNavigationItemAnimated:(BOOL)animated:

- (UINavigationItem *)popNavigationItemAnimated:(BOOL)animated {
    return [super popNavigationItemAnimated:NO];
}

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

0 голосов
/ 27 октября 2015

Если кто-нибудь хочет отключить push-анимацию - это работает для меня, переопределив этот метод на UINavigationBar:

- (void)pushNavigationItem:(UINavigationItem *)item {
    NSMutableArray* items = [[self items] mutableCopy];
    [items addObject:item];
    self.items = items;
}
...