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