Изменение фонового изображения UINavigationBar
Я пытаюсь изменить фоновое изображение UINavigationBar моего приложения. Я попробовал несколько способов. Сначала я добавил в свой класс AppDelegate следующий код:
@implementation UINavigationBar (CustomImage)
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed: @"navigationbar.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
Но он не работал. Моя следующая попытка состояла в том, чтобы написать класс CustomizedNavigationBar, который переопределяет метод drawRect. Это выглядело так:
CustomizedNavigationBar.h
#import <UIKit/UIKit.h>
@interface CustomizedNavigationBar : UINavigationBar
@end
CustomizedNavigationBar.m
#import "CustomizedNavigationBar.h"
@implementation CustomizedNavigationBar
- (void) drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed: @"navigationbar.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
NSLog(@"I got called!!!!!");
}
@end
В моем .xib файле, где определен параметр NavigationBar, я изменил класс на новый CustomizedNavigationBar. Но все же он не работает.
В качестве другого теста я загрузил примерный проект, в котором необходимо изменить фоновое изображение. Но даже с этим образцом кода он не работал.
Что я делаю неправильно? Я использую IOS 5. Любые предложения или другие способы, которыми я мог бы определить фоновое изображение?
Спасибо за ваши ответы!
Ответы
Ответ 1
Начиная с iOS 5 вы должны использовать метод setBackgroundImage:forBarMetrics:
:
[myNavbar setBackgroundImage:[UIImage imageNamed: @"UINavigationBarBackground.png"]
forBarMetrics:UIBarMetricsDefault];
И в Swift:
navigationBar.setBackgroundImage(UIImage(named: "UINavigationBarBackground.png"),
forBarMetrics: .Default)
Ответ 2
Учитывая все версии iOS, это, как представляется, выполняет как пользовательское фоновое изображение, так и пользовательский размер UINavigationBar:
@interface CustomNavigationBar : UINavigationBar
@end
@implementation CustomNavigationBar
-(void) drawRect:(CGRect)rect
{
UIImage *image = [UIImage imageNamed: @"navigationBar"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
//for iOS5
[self setBackgroundImage:[UIImage imageNamed: @"navigationBar"] forBarMetrics:UIBarMetricsDefault];
}
//for custom size of the UINavigationBar
- (CGSize)sizeThatFits:(CGSize)size {
CGSize newSize = CGSizeMake(320,31);
return newSize;
}
@end
Я использую такие коды в общем месте, как файл Utilities.
Надеюсь, что это поможет.
Ответ 3
Просто попробуйте с этим кодом.. В файле implmentation (.m).
#import "RootViewController.h"
@implementation UINavigationBar (CustomImage)
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed: @"navheader.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
@implementation RootViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
[email protected]"You are Done.";
}
Это отлично работает для меня.
Над кодом работает только для IOS 4. если вы используете IOS 5, то используйте.....
[myNavbar setBackgroundImage:[UIImage imageNamed:
@"UINavigationBarBackground.png"]
forBarMetrics:UIBarMetricsDefault];
Ответ 4
Вы можете добавить UIImageview в панель навигации следующим образом UINavigationBar navBar = [[UINavigationBar alloc] init]; [navBar addSubview: imageview]; [navBar release];
Вы можете проверить сообщение:
iPhone - Пользовательский фон NavigationBar
Ответ 5
Хорошо для iOS 4 существует простое решение, например:
nvc.navigationBar.layer.contents = (id)img.CGImage;
Ответ 6
Вы также можете попробовать это для фона навигационной панели.
UINavigationBar *navigationBar = self.navigationController.navigationBar;
UIImage *image = [UIImage imageNamed: @"NavBar-Wood.png"];
[navigationBar setBackgroundImage:image forBarMetrics: UIBarMetricsDefault];
self.navigationController.navigationBar.tintColor = [UIColor brownColor];
Спасибо.
Ответ 7
Другой способ установки изображения в панели навигации:
UIImage* logo = [ UIImage imageNamed:@"Logo.png" ];
UIImageView* logoView = [[[UIImageView alloc] initWithImage:logo] autorelease];
self.navigationItem.titleView = logoView;
Это не изменит весь фон панели навигации. Но добавляет фоновое изображение, сосредоточенное на панели навигации, которое когда-то больше предназначено (что я искал).