Objective-C: Фоновое изображение и заголовок в панели навигации
-
28-09-2019 - |
Вопрос
Нужна фоновое изображение и заголовок в моей навигационной баре. Для изображения я пишу категорию:
@implementation UINavigationBar(MyNavigationBar)
- (void)setBackgroundImage {
UIImageView *aTabBarBackground = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"navBarBackgrd.png"]];
[self addSubview: aTabBarBackground];
[self sendSubviewToBack: aTabBarBackground];
[aTabBarBackground release];
}
@end
Я называю эту категорию в моем AppDelegate и имейте фоновые изображения во всем приложении:
[navigationController.navigationBar setBackgroundImage];
Каждый ViewController имеет название:
[self setTitle:@"MyTitle"];
Но после установки фонового изображения у меня есть проблема с заголовком.
В первом представлении каждый работает, я вижу фоновое изображение и название :-) Но на следующем представлении название исчезает. Только фоновое изображение видно. Может быть, заголовок находится под изображением?
Технически можно показать оба. С этим трюком он работает:
Скрыть панель навигации перед открытием следующего ViewController:
Self.navigingController SetnavIgintbarhidden: Да];
Покажите навигационную панель в следующем ViewController:
Self.navigingController Setnaviggationbarhidden: нет];
Теперь изображение и название видны, но это решение не самым лучшим ;-)
Решение
Я понял!
@implementation UINavigationBar(MyNavigationBar)
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed: @"navBarBackgrd.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
Другие советы
После IOS5 вы должны сделать это, например, в AppDelegate
UIImage *img = [[UIImage imageNamed:@"image.png"]resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[UINavigationBar appearance] setBackgroundImage:img forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBarStyle:UIBarStyleBlackTranslucent];
[[UINavigationBar appearance] setTintColor:[UIColor colorWithRed:0 green: 0 blue:0 alpha:1]];