Добавление изображения в панель навигации

Я хотел бы, чтобы изображение занимало всю панель навигации. Это навигация, которая поставляется с навигационным приложением. Он появляется на RootViewController с сопровождающим UITableView. Я видел несколько примеров того, как это может сработать.

установка навигации название:

UIImage *image = [UIImage imageNamed:@"TableviewCellLightBlue.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[self.navigationController.navigationBar.topItem setTitleView:imageView];

проблема в том, что она охватывает только заголовок, а не весь навигационный бар.

также в этой теме: http://discussions.apple.com/message.jspa?messageID=9254241#9254241. В конце концов, решение похоже на использование панели вкладок, которую я не использую. Это так сложно установить фон панели навигации? Есть ли другая, более простая техника?

Я хотел бы иметь фон для навигации и по-прежнему иметь возможность использовать текст заголовка.

9 ответов


в вашем случае, это решение найдено в другом ответе будет хорошо работать.

С добавлением категории" CustomImage " в UINavigationBar, затем вы можете просто позвонить:

UINavigationBar *navBar = self.navigationController.navigationBar;
UIImage *image = [UIImage imageNamed:@"yourNavBarBackground.png"];
[navBar setBackgroundImage:image];

этот код должен идти в метод

- (void)viewWillAppear:(BOOL)animated

контроллера вида, где вы хотите иметь пользовательский образ. И, в таком случае, вам лучше позвонить:

[navBar clearBackgroundImage]; // Clear any previously added background image

перед setBackgroundImage (в противном случае он будет добавлен несколько раз...)


его изменили для ios6, чтобы он работал в ios 6:

UINavigationBar *navBar = self.navigationController.navigationBar;
UIImage *image = [UIImage imageNamed:@"image.png"];
[navBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];

UIImage *image = [UIImage imageNamed:@"YourImage.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

[self.navigationController.navigationBar addSubview:imageView];

на самом деле есть гораздо более простой способ, чтобы добавить фоновое изображение в любую UIView класса или подкласса. Он не требует категоризации или расширения класса (подклассов), и вы можете сделать это на основе "по мере необходимости". Например, чтобы добавить фоновое изображение на панель навигации контроллера вида, выполните следующие действия:

self.navigationController.navigationBar.layer.contents = (id)[UIImage 
    imageNamed:@"background.png"].CGImage;

вы должны помнить, чтобы добавить рамки Quartz Core в свой проект и добавить #import <QuartzCore/QuartzCore.h> везде, где вам нужно это сделать. Это намного чище, проще измените слой рисования всего, что наследуется от UIView. Конечно, если вы хотите добиться аналогичного эффекта для всех навигационных панелей или вкладок, подклассы имеют смысл.


UIImage *logo = [UIImage imageNamed:@"my_logo"];
UIImageView *logoView = [[UIImageView alloc]initWithImage:logo];
logoView.frame = CGRectMake(0, 0, 320, 37);

UINavigationController *searchNavCtrl = [[UINavigationController alloc] initWithRootViewController:searchViewController];
searchNavCtrl.navigationBar.barStyle = UIBarStyleBlack;


//searchNavCtrl.navigationItem.titleView = logoView;
//[searchNavCtrl.navigationController.navigationBar.topItem setTitleView:logoView];
[searchNavCtrl.navigationBar addSubview:logoView];

[logoView release];

просто добавьте эту строку .

 [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"NavBar.png"] forBarMetrics:UIBarMetricsDefault];

БАМ! Одна строчка и готово.


Я cmp'S решение и добавил некоторую логику, чтобы удалить его, как я только хотел пользовательское фоновое изображение на главном экране в on view появляются.

HomeViewController.м

UIImage *image = [UIImage imageNamed:@"HomeTitleBG.png"]; 
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
imageView.tag = 10;

UIImageView *testImgView = (UIImageView *)[self.navigationController.navigationBar viewWithTag:10];

if ( testImgView != nil )
{
    NSLog(@"%s yes there is a bg image so remove it then add it so it doesn't double it", __FUNCTION__);
    [testImgView removeFromSuperview];

} else {
    NSLog(@"%s no there isn't a bg image so add it ", __FUNCTION__);
}

[self.navigationController.navigationBar addSubview:imageView];


[imageView release];

Я также попытался использовать предложенный метод clearBackgroundImage, но не смог заставить его работать, поэтому я дал изображению тег, а затем удалил его в других viewcontrollers on view.

OtherViewController.м

UIImageView *testImgView = (UIImageView *)[self.navigationController.navigationBar viewWithTag:10];

if ( testImgView != nil )
{
    NSLog(@"%s yes there is a bg image so remove it", __FUNCTION__);
    [testImgView removeFromSuperview];  
} 

`


просто перейдите в контроллер вида и вставьте super viewdidload и замените изображение в mainlogo, а затем установите заголовок навигации в set your image logo

  - (void)viewDidLoad
{
   [super viewDidLoad];

   //set your image frame
    UIImageView *image=[[UIImageView alloc]initWithFrame:CGRectMake(0,0,70,45)] ;

  //set your image logo replace to the main-logo
   [image setImage:[UIImage imageNamed:@"main-logo"]];

   [self.navigationController.navigationBar.topItem setTitleView:image];

}

добавить код в appdelegate закончил с методом запуска

#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0)
{
    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigation_or.png"] forBarMetrics:UIBarMetricsDefault];
    [[UINavigationBar appearance] setTitleVerticalPositionAdjustment:0.0 forBarMetrics:UIBarMetricsDefault];
}
else
{
    [[UINavigationBar appearance] setBarTintColor:UIColorFromRGB(0x067AB5)];

    [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];

    // Uncomment to assign a custom backgroung image
    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigation_or.png"] forBarMetrics:UIBarMetricsDefault];

    // Uncomment to change the back indicator image
    [[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];

    [[UINavigationBar appearance] setBackgroundColor:[UIColor whiteColor]];
    [[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@""]];

    // Uncomment to change the font style of the title

    NSShadow *shadow = [[NSShadow alloc] init];
    shadow.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8];
    shadow.shadowOffset = CGSizeMake(0, 0);

    [[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:[UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], NSForegroundColorAttributeName,shadow, NSShadowAttributeName,[UIFont fontWithName:@"HelveticaNeue-Bold" size:17], NSFontAttributeName, nil]];

    [[UINavigationBar appearance] setTitleVerticalPositionAdjustment:0.0 forBarMetrics:UIBarMetricsDefault];
}