UINavigationBar со сплошным цветом iOS 5
Я использую категорию для настройки панели навигации. Мой код:
- (void) drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColor(context, CGColorGetComponents([self.tintColor CGColor]));
CGContextFillRect(context, rect);
}
Это работает хорошо, но не в iOS 5. Мне нужно, чтобы цвет навигационной панели был сплошным без какого-либо градиента. Как мне это сделать?
Как я знаю, для iOS 5 единственный способ заменить drawRect
метод заключается в создании подкласса, но есть ли способ заставить все контроллеры навигации использовать UINavigationBar
подкласс вместо оригинального класса?
3 ответа
В 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
Вы, вероятно, можете добиться того же, установив какой-то цвет или что-то вместо изображения. Но я обнаружил, что это простое решение.
Это касается как iOS 5, так и iOS 4.3 и более ранних версий.
Это больше взломать и постоянно работает для меня. Это должно быть в файле 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];