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

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

Я хотел бы, чтобы изображение заняло всю панель навигации. Это навигационная система, которая поставляется с навигационным приложением. Он появляется на 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. К концу решения, похоже, использует панель вкладок, которую я не использую. Неужели сложно установить фон на панели навигации? Есть ли еще одна более простая методика?

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

4b9b3361

Ответ 1

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

При добавлении категории "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 (иначе он будет добавлен несколько раз...)

Ответ 2

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

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

Ответ 3

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

[self.navigationController.navigationBar addSubview:imageView];

Ответ 4

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

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

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

Ответ 5

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];

Ответ 6

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

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

Bam! Одна строка и сделана.

Ответ 7

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

HomeViewController.m

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 на представлении.

OtherViewController.m

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];  
} 

`

Ответ 8

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

  - (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];

}

Ответ 9

** add code in appdelegate did finish with launching method   

#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];
    }