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