Подтвердить что ты не робот

Как добавить фоновое изображение на панель навигации iphone?

Я хочу добавить фон изображения в свою навигационную панель

Правильно ли это?

//set custom background image
UIImageView *backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"NavigationBackground.png"]];
[self.navigationBar insertSubview:backgroundView atIndex:0];
[backgroundView release];
4b9b3361

Ответ 1

Здесь указан код из . Вставьте этот код в контроллер rootview выше @implementation rootviewController

@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

Как и в iOS 5, есть официальный способ сделать это. (см. Библиотека разработчиков iOS)

// someplace where you create the UINavigationController
if ([navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) {
    UIImage *image = [UIImage imageNamed:@"NavigationBar.png"];
    [navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
}

Но все-таки сохраните старый код для обратной совместимости, если вы действительно не хотите вырезать iOS 4 и ниже.

Ответ 2

Только ваш код не сделает этого, вам нужно будет написать категорию, чтобы она работала. Существует два подхода к тому, как вы должны это делать: первый включает в себя создание изображения подвид вашего UINavigationBar и повторное привлечение его вперед в каждом из ваших методов UIViewController viewDidAppear. Тем не менее, было сообщено о некоторых проблемах с покрытием права UIBarButtonItem. Другой метод включает переопределение

- (void)drawRect:(CGRect)rect

и нарисовать изображение там. Оба они подробно описаны в в этом блоге.

Ответ 3

Самый простой способ - просто установить содержимое слоя UINavigationBar.

NSString *barBgPath = [[NSBundle mainBundle] pathForResource:@"mybgimage" ofType:@"png"];
[nBar.layer setContents: (id)[UIImage imageWithContentsOfFile: barBgPath].CGImage];

Нижняя сторона - это кнопки, которые не генерируются с помощью правильного оттенка, но вы можете установить цвет навигационной панели на то, что ближе всего к вашему bg-изображению, и следует позаботиться о оттенке.

Ответ 4

Я бы сделал это в appdelegate что-то вроде

+ (void)Generalstyle {
    //navigationbar
    UINavigationBar *navigationBar = [UINavigationBar appearance];
    [navigationBar setBackgroundImage:[UIImage imageNamed:@"navigation.png"] forBarMetrics:UIBarMetricsDefault];

}

И в

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    [[self class] Generalstyle];

}

.h файл:

+ (void) Generalstyle;

Ответ 5

в ios5, я установил фоновое изображение навигационной панели (для всего изображения навигационной панели) в AppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [application setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:NO];
    UIImage *navBarBackgroundImage = [UIImage imageNamed:@"nav_bg"];
    [[UINavigationBar appearance] setBackgroundImage:navBarBackgroundImage forBarMetrics:UIBarMetricsDefault];
    return YES;
}

Ответ 6

Когда придет iphone 5, мы должны установить оба типа устройства. Поэтому используйте этот

if([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) {
//iOS 5 new UINavigationBar custom background
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbg_ForiPhone5_Imagename.png"] forBarMetrics: UIBarMetricsDefault];
} else {
[self.navigationController.navigationBar insertSubview:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"navbg_ForOtherIphone_Imagename.png"]] atIndex:0];
}

Для получения дополнительной информации перейдите по ссылке

Ответ 7

Это отлично работает в iOS 6 и 7

UINavigationBar *navBar = [[self navigationController] navigationBar];
  UIImage *backgroundImage = [UIImage imageNamed:@"nav-bar-background-normal"];
  [navBar setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault];

Ответ 8

Вы также можете добавить категорию, которая расширяет класс UINavigationBar и переопределяет метод drawRect: > .

Ответ 9

то, что я сделал, только что создал UIImage с изображением, которое я хотел, и добавил в панель навигации, как это.

UIImage *image = [UIImage imageNamed:@"yourImage.png"];

[[UINavigationBar appearance] setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];

Ответ 10

Быстрая версия:

let navBar = UINavigationBar.appearance();
navBar.setBackgroundImage(UIImage(named: "yourImageName"), forBarMetrics: .Default);

Ответ 11

При добавлении фонового изображения на панели навигации вы должны быть очень осторожны в своих измерениях. Пожалуйста, убедитесь, что у вас есть следующие размеры для разных размеров экрана.

1) background.png = > 320x44
2) [email protected] = > 640x88//используется для iPhone5 и для устройств сетчатки
3) [email protected] = > 1334x183//используется для iPhone6 ​​

Используйте следующий код для добавления фонового изображения и во избежание чередования фонового изображения на панели навигации.

[self.navigationController.navigationBar setBackgroundImage:[[UIImage imageNamed:@"background"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0) resizingMode:UIImageResizingModeStretch] forBarMetrics:UIBarMetricsDefault];

Ответ 12

Попробуйте использовать этот код в классе AppDelegate для отображения изображения на панели навигации. Это поможет вам много.

[[UINavigationBar appearance] setBackgroundImage:[[UIImage imageNamed:@"headerImg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)] forBarMetrics:UIBarMetricsDefault];