Подвид UINaviagtionBar не исчезает во время перехода UIViewController Back

У меня есть приложение на основе UINavigationBar. Я создал пользовательский UIView с некоторыми заголовками и добавил его в качестве подпредставления на панель навигации:

[self.navigationController.navigationBar addSubview:_navbarView];

Все работает нормально, пока я не нажму кнопку «Назад» на панели навигации и не произойдет переход UIViewController.

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


person 6rod9    schedule 10.03.2014    source источник


Ответы (2)


Если вы добавите подпредставление на панель навигации, оно просто останется там; контроллер навигации не знает, что с ним делать. Вы говорите, что в вашем пользовательском представлении есть «несколько заголовков» - вы пытались сделать это вместо этого?

self.navigationItem.titleView = _navbarView;

Тогда контроллер навигации знает, что представление должно использоваться вместо заголовка вашего контроллера, и оно должно анимироваться и исчезать.

Если это не сработает, вам нужно будет подумать о том, чтобы стать делегатом контроллера навигации. Начиная с iOS7, это может стать довольно сложным.

person Simon    schedule 10.03.2014
comment
Отличный ответ! Добавление его в качестве titleView для navigationItem предоставило анимацию, которую я искал. Отличное объяснение и решение! - person 6rod9; 10.03.2014

Если вам нужна настраиваемая панель навигации, было бы неплохо создать UINavigationController с настраиваемым UINavigationBar.

- (instancetype)initWithNavigationBarClass:(Class)navigationBarClass toolbarClass:(Class)toolbarClass 

в своем классе панели навигации вы можете реализовать

- (UINavigationItem *)popNavigationItemAnimated:(BOOL)animated
{
    if (animated) {
        //your_problem_view animation here
    }
    [super popNavigationItemAnimated];
}
person Avt    schedule 10.03.2014
comment
Это кажется гладким решением, но какой код я должен вставить в это условие? Затухание анимации mi custom view? - person 6rod9; 10.03.2014
comment
да. Затухание анимации вашего пользовательского представления. - person Avt; 10.03.2014