Как я могу изменить фон UINavigationBar? - PullRequest
5 голосов
/ 01 декабря 2010

Я бы хотел изменить фон моего UINavigationBar на [UIColor colorWithImage:], но он не работает. Чего мне не хватает?

EDIT:

Как только я создал свой подкласс, где я могу установить UINavigationController для его использования?

Ответы [ 2 ]

8 голосов
/ 01 декабря 2010

Вы можете использовать свойство tintColor, чтобы изменить цвет для UINavigationBar, но чтобы установить изображение в качестве фона, вам нужно будет предоставить собственный подкласс UINavigationBar и переопределитьdrawRect: метод, например:

- (void)drawRect:(CGRect)rect {
    // Drawing code 
    UIImage *img = [UIImage imageNamed: @"background-image.png"];
    [img drawInRect:CGRectMake(0, 
                               0, 
                               self.frame.size.width, 
                               self.frame.size.height)];
}

Если вы используете Interface Builder для создания пользовательского интерфейса, а затем для использования пользовательской панели навигации, просто выберите элемент UINavigationBar в Interface Builder, откройте Инспектор и в Identityна вкладке укажите свой подкласс UINavigationBar в поле класса, например:

Example screenshot showing custom UINavigationBar subclass

7 голосов
/ 01 декабря 2010

Чтобы иметь изображение на панели навигации, вы должны нарисовать его самостоятельно, что на самом деле не так сложно. Сохраните это как UINavigationBar+CustomBackground.m (добавляет пользовательскую категорию в UINavigationBar):

@implementation UINavigationBar (CustomBackground)

- (void)drawRect:(CGRect)rect {
    UIImage *image = [UIImage imageNamed:@"NavMain.png"];
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}

@end
...