У меня есть пользовательский UINavigationBar, у которого фон изображения и высота отличаются от значения по умолчанию. Он отображается нормально, но как только я перехожу назад и вперед между приложениями, фоновое изображение и кнопки на панели навигации подпрыгивают вверх.
UINavigationBar создается в наконечнике и имеет собственный класс, который переопределяет реализацию по умолчанию для добавления изображения:
@implementation MyUINavigationBar
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed: @"nav.png"];
rect.size.height = 60;
[image drawInRect:rect];
}
@end
В этот момент панель отображается неправильно. В - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
моего делегата приложения я исправляю это с помощью кода:
self.navigationController.view.frame = CGRectMake(0, 20, 320, 460);
self.navigationController.navigationBar.frame = CGRectMake(0, 0, 320, 60);
Теперь все отображается правильно. Когда я переключаюсь на другое приложение и возвращаюсь назад, полоса подпрыгивает, как будто кадры не были применены. Это происходит сразу после того, как я снова переключаюсь на приложение.
Ниже приведены два скриншота, показывающие, что происходит. Первая показывает правильную версию, другая - неисправную.
Есть идеи, что может происходить? Я попытался применить новые кадры в viewWillAppear и viewDidAppear активного представления или в applicationDidBecomeActive делегата приложения, но это не помогло.
https://skitch.com/instromaniac/rtagr/ios-simulator
https://skitch.com/instromaniac/rtaf9/view-not-ok