используя изображение или оттенок цвета на uinavigationbar в iphone? - PullRequest
6 голосов
/ 23 мая 2009

как показать фоновое изображение на панели навигации или придать цветовой оттенок панели навигации в родном приложении для iphone ??

Ответы [ 7 ]

10 голосов
/ 04 ноября 2011

Для iOS5 используйте следующие строки кода:

UINavigationBar *navBar = [[self navigationController] navigationBar];
UIImage *backgroundImage = [UIImage imageNamed:@"nav-bar-background-normal"];
[navBar setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault];

Для обратной совместимости выполните проверку, чтобы увидеть, отвечает ли панель навигации на setBackgroundImage: forBarMetrics:

Дополнительная информация о: http://sebastiancelis.com/2009/12/21/adding-background-image-uinavigationbar/

8 голосов
/ 26 октября 2010

Вот как я сделал на iOS4:

#import <QuartzCore/QuartzCore.h> // For .layer 

self.navigationController.navigationBar.layer.contents = (id)[UIImage imageNamed:@"navigationBarBackgroundImage"].CGImage;
self.navigationController.navigationBar.tintColor = [UIColor orangeColor];

Нет необходимости переключать подпредставления между z-порядками (-exchangeSubviewAtIndex: withSubviewAtIndex :), и фоновое изображение, и tintColor задаются в одной строке кода и также работает с @ 2x изображением

6 голосов
/ 23 мая 2009

искал это неделю назад. Нашел здесь обсуждения. яблоко. com / thread.jspa? threadID = 1649012 & tstart = 0 (извините, я не могу опубликовать реальную ссылку).

-(void)setBackgroundImage:(UIImage*)image withTag:(NSInteger)bgTag{
if(image == NULL){ //might be called with NULL argument
    return;
}
UIImageView *aTabBarBackground = [[UIImageView alloc]initWithImage:image];
aTabBarBackground.frame = CGRectMake(0,0,self.frame.size.width,self.frame.size.height);
aTabBarBackground.tag = bgTag;
[self addSubview:aTabBarBackground];
[self sendSubviewToBack:aTabBarBackground];
[aTabBarBackground release];
}
/* input: The tag you chose to identify the view */
-(void)resetBackground:(NSInteger)bgTag {
    [self sendSubviewToBack:[self viewWithTag:bgTag]];
}

Я сделал это как категорию для UINavigationBar. Чтобы установить это фоновое изображение для UINavigationBar внутри UINavigationBarController, я сделал это:

[navigationControllerForChannels.navigationBar setBackgroundImage:[UIImage imageNamed:@"top_bar.png"] withTag:48151623];

У меня были некоторые ошибки при обновлении панели вкладок, поэтому вы хотите позвонить

[self.navigationController.navigationBar resetBackground:48151623];

После любых изменений в баре.

3 голосов
/ 24 марта 2011

Вы можете переопределить UINavigationBar drawRect. Код можно разместить на appDelegate.m Я протестировал его, и он работает на 3х и 4х iOS.

@implementation UINavigationBar (UINavigationBarCategory)
- (void)drawRect:(CGRect)rect {
    UIColor *color = [UIColor blackColor]; //tint color
    UIImage *img = [UIImage imageNamed: @"navBarBg.png"]; // your image
    [img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
    self.tintColor = color;
 }@end
2 голосов
/ 19 ноября 2012

Для iOS5 и iOS6 я использовал это решение, и оно отлично работало, создав универсальное фоновое изображение UINavigationBar.

Портрет на сетчатке iPhone 640px x 88px / iPhone без портрета Retina 320px на 44 пикс.

Внутри AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

Поместите этот код

// Set the status bar to black color.
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:NO];

// Change @"menubar.png" to the file name of your image.
UIImage *navBar = [UIImage imageNamed:@"menubar.png"];

[[UINavigationBar appearance] setBackgroundImage:navBar forBarMetrics:UIBarMetricsDefault];

Не забудьте изменить имя изображения (menubar.png)

Проверьте эту ссылку для полного ответа http://www.lwxted.com/blog/2012/add-custom-background-image-uinavigationbar-ios-5/

1 голос
/ 23 мая 2009

фоновое изображение займет немного больше работы (вы можете попробовать установить titleView того же размера, что и сама панель; я сам не пробовал) или добавить представление за существующими подпредставлениями. Цвет оттенка прост: navBar.tintColor = [UIColor orangeColor];

0 голосов
/ 10 июня 2011

Если вы используете решение CGImage, у вас может быть проблема с размером изображения:

CGRect layer=self.navigationController.navigationBar.frame;
layer.size.height=57.0;
layer.origin.y=0;
self.navigationController.navigationBar.frame=layer;
CGImageRef imageRef         = [UIImage imageNamed:@"myImg.png"].CGImage;
self.navigationController.navigationBar.layer.contents = (id)imageRef;

Мне кажется, что изображение растянуто вниз, поскольку кажется, что слой имеет высоту 44,0 пикселя, но фоновое изображение для UINavigationBar должно быть не менее 57,0.

Если вы попытаетесь переместить рамку слоя, все кнопки будут перемещаться внутри него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...