Проблема NavigationBarstyle при переключении с iOS 4 на 5
-
26-10-2019 - |
Вопрос
Получите небольшую проблему дизайна после обновления до iOS 5 и Xcode 4.2
Так выглядел мой взгляд в iOS 4:
И так выглядит в iOS 5:
В моем делегате навигации у меня есть следующий метод, чтобы нарисовать «изображение» вверху:
- (void)drawRect:(CGRect)rect {
UIImage *image;
if(self.barStyle == UIBarStyleDefault){
image = [UIImage imageNamed: @"topbar_base.png"];
}
else{
image = [UIImage imageNamed: @"nyhedsbar_base.png"];
}
[image drawInRect:CGRectMake(-1, -1, self.frame.size.width+3, self.frame.size.height+3)];
}
И внутри моего контроллера я установил следующее:
self.navigationBarStyle = UIBarStyleBlack;
Почему это не работает в iOS 5?
Спасибо
Решение
Под iOS5 вам нужно использовать UIAppearance
. Анкет Посмотрите на это. Вот пример для его условного использования, чтобы вы могли продолжать поддерживать iOS4:
// iOS5-only to customize the nav bar appearance
if ([[UINavigationBar class] respondsToSelector:@selector(appearance)]) {
UIImage *img = [UIImage imageNamed: @"NavBarBackground.png"];
[[UINavigationBar appearance] setBackgroundImage:img forBarMetrics:UIBarMetricsDefault];
}
Как видите, это устанавливает пользовательское фоновое изображение для все Uinavigationbars. Есть много вещей, которые вы можете сделать с UIApparance. Вы захотите сохранить любые пользовательские вещи, в которых вы сейчас делаете drawRect:
Поскольку устройства Pre-IOS4 все равно будут использовать это, а не новый код UIApearance.