2009-06-02 8 views

ответ

4

UINavigationBar class имеет UIColor *tintColor что то, что вы можете изменить в коде.

Альтернативно это свойство также отображается в инструменте проектирования интерфейса InterfaceBuilder.

+0

Спасибо за ваш ответ. Не могли бы вы сообщить мне, смогу ли я использовать изображение в качестве фона навигационной панели? – ebaccount

+0

Чтобы установить его на изображение, вы можете попробовать использовать шаблон для своего UIColor: UIImage * patternImage = [UIImage imageNamed: @ "background.png"]; UIColor * myColor = [UIColor colorWithPatternImage: patternImage]; yourNavigationController.navigationBar.tintColor = myColor; Я не пробовал это, поэтому YMMV. Если это не сработает, вам придется подклассифицировать UINavigationBar (Не самый простой из задач). – pixel

+0

@pixel UINavigationBar, похоже, не хочет принимать UIColor, сделанный с colorWithPatternImage, к сожалению. Кажется, это создает черную навигационную панель. –

4

Предполагая, что вы добавили навигационную панель программно, а не в Interface Builder, просто поместите это в свой метод viewDidLoad.

self.navigationController.navigationBar.tintColor = [UIColor grayColor]; 
0

Свойство TintColor не влияет на стандартное подменю навигационной панели как нижней границы и тени. Иногда полезно переопределить макет панели навигации вообще.

Несмотря на то, что navigationBar доступен только для чтения для UINavigationController, вы можете избежать этого ограничения на «setValue: forKey:». Этот метод был одобрен для 5 приложений, успешно представленных в AppStore.

Вы можете подклассифицировать UINavigationBar и изменить метод drawRect: как хотите. Например,

@implementation CustomNavigationBar 

- (void) drawRect:(CGRect)rect 
{ 
    [super drawRect:rect]; 
    UIImage *backgroundImage = ImageFromColor(WANTED_COLOR); 
    [backgroundImage drawInRect:rect]; 
} 

После того, как вы можете создать подкласс UINavigationController и изменить initWithRootViewController:

- (id) initWithRootViewController:(UIViewController *)rootViewController 
{ 
    self = [super initWithRootViewController:rootViewController]; 
    if (self) 
    { 
     CustomNavigationBar *navBar = [CustomNavigationBar new]; 
     [self setValue:navBar forKey:@"navigationBar"]; 
    } 
    return self; 
} 

Также вы можете изменить этот подход, делая Категория для UINavigationController и реализации метода swizzling для initWithRootViewController:

P.S. Вчера мое приложение появилось в AppStore без каких-либо проблем с этим подходом.

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