0

я поставил свою Панель навигации фон с этим кодом в моем App делегат:UINavigationBar Проблема Фоновое изображение

@implementation UINavigationBar (UINavigationBarCategory) 
- (void)drawRect:(CGRect)rect { 
    UIImage *backgroundImage = [UIImage imageNamed: @"Nav-rightpane.png"]; 

    CGContextDrawImage(UIGraphicsGetCurrentContext(), 
         CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), 
         backgroundImage.CGImage); 
} 
@end 

Это работает отлично, но теперь я должен изменить цвет фона на значение по умолчанию в UIPopoverController. Любая идея для этого?

Thanks

ответ

0

Не используйте это решение. Просто удалите UINavigationBar и реализуйте свои собственные UINavigationController.

@interface XNavigationController : UINavigationController{} 

и изменение переопределение viewDidLoad метод в реализации

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIImage *img = [UIImage imageNamed: @"Nav-rightpane.png"]; 
    UIImageView *imageView = [[UIImageView alloc] initWithImage:img]; 
    [imageView setFrame:self.navigationBar.bounds]; 
    [imageView setContentMode:UIViewContentModeScaleToFill]; 
    [self.navigationBar addSubview:imageView]; 
    [imageView release]; 
} 

поэтому используйте navigationController, когда вы хотите изменить цвет фона панели навигации.

0

Правильное решение предварительно iOS5, как рекомендовано инженерами компании Apple является не категориям применения и не метод использования swizzling. Это подтверждается тем, что он прерывается на iOS 5, который очень близок к выпуску.

Вместо этого вы должны создать подкласс UINavigationBar, переопределить метод drawRect:, а затем использовать Interface Builder для определения вашего контроллера навигации. Interface Builder позволит вам изменить имя класса для навигационной панели для пользовательского подкласса:

enter image description here

enter image description here

Если вы хотите, чтобы избежать Interface Builder, вы можете создать временный XIB и загрузить экземпляр контроллер навигации из него, затем используйте NSKeyedArchiver, чтобы архивировать его в файл. Затем используйте xxd -i <filename> в командной строке для генерации C-кода для необработанных байтов навигационного контроллера. Затем вставьте это в исходный файл и отпустите его, если хотите экземпляр.

Кажется, что много работы, но видео и инженеры WWDC на форумах неоднократно заявляли, что это единственный безопасный и надежный способ сделать то, что вы хотите.

В iOS 5 все это становится намного проще.

Смежные вопросы