UINavigationBar со сплошным цветом iOS 5 - PullRequest
3 голосов
/ 25 ноября 2011

Я использую категорию для настройки панели навигации. Мой код:

- (void) drawRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColor(context, CGColorGetComponents([self.tintColor CGColor]));
    CGContextFillRect(context, rect);
}

Работает хорошо, но не в iOS 5. Мне нужно, чтобы цвет навигационной панели был сплошным, без градиента. Как мне это сделать?

Как я знаю, для iOS 5 единственный способ заменить drawRect метод состоит в создании подкласса, но есть ли способ заставить все контроллеры навигации использовать UINavigationBar подкласс вместо исходного класса?

Ответы [ 3 ]

13 голосов
/ 25 ноября 2011

В iOS 5 вы можете использовать протокол UIAppearance для настройки внешнего вида всех UINavigationBars в вашем приложении.Ссылка: ссылка .

Я получил сплошной цвет, чтобы создать собственное изображение для панели навигации и установить его в качестве фона UINavigationBars.Возможно, вам придется создать изображение того же размера, что и UINavigationBar, по крайней мере, так я и сделал.

В вашем делегате приложения сделайте что-то вроде этого:

UIImage *image = [UIImage imageNamed:@"navbarbg.png"];
[[UINavigationBar appearance] setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];

У вас также естьЧтобы добавить протокол UIAppearanceContainer в заголовочный файл:

@interface AppDelegate : UIResponder <UIApplicationDelegate, UIAppearanceContainer>

@end

Вы, вероятно, можете добиться того же, установив какой-то цвет или что-то вместо изображения.Но я обнаружил, что это простое решение.

1 голос
/ 19 июня 2012

Это относится как к iOS 5, так и к iOS 4.3 и более ранним версиям

https://gist.github.com/1774444

0 голосов
/ 13 апреля 2013

Это скорее взлом, и он постоянно работает на меня. Это должно быть в файле AppDelegate.

//Create  a size struct.
CGSize size = CGSizeMake(768, 50);

//CReate a imagecontext from a non-existing image. You can use a existing image as well, in that case the color will be the color of the image. 
UIImage *backgroundImage = [UIImage imageNamed:@"nonexist.png"];

UIGraphicsBeginImageContext(size);

[backgroundImage drawInRect:CGRectMake(0,0,size.width,size.height)];

UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

self.navigationController = [[UINavigationController alloc]initWithRootViewController:self.viewController];

Установите цвет фона на ваш выбор.

[self.navigationController.view setBackgroundColor:[UIColor blackColor]];

self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];

//Most important line.
[navigationController.navigationBar setBackgroundImage: newImage forBarMetrics:UIBarMetricsDefault];
...