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

Изменение фонового изображения 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. Любые предложения или другие способы, которыми я мог бы определить фоновое изображение?

Спасибо за ваши ответы!

4b9b3361

Ответ 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;

Это не изменит весь фон панели навигации. Но добавляет фоновое изображение, сосредоточенное на панели навигации, которое когда-то больше предназначено (что я искал).