UINavigationBar оттенок цвета мигает в iOS 4 - PullRequest
0 голосов
/ 29 февраля 2012

Приложение, над которым я работаю, имеет собственную панель nab, но поддерживает iOS 4.2-iOS 5, поэтому мне нужно установить фон и оттенок UINavigationBar этим старым школьным способом в моем делегате приложения.

@implementation UINavigationBar (UINavigationBarCategory)

- (void)drawRect:(CGRect)rect {
    self.tintColor = [UIColor colorWithRed:42.0/255.0 
                                     green:164.0/255.0 
                                      blue:182.0/255.0
                                     alpha:1.0];
    UIImage *img  = [UIImage imageNamed:@"navbar_bg.png"];
    [img drawInRect:CGRectMake(0.0, 0.0, 
                               self.frame.size.width, 
                               self.frame.size.height)];
}
@end

Это работает по большей части, но я заметил, что при первом запуске приложения UIBarButtonItems мигает цвет панели навигации по умолчанию на секунду, прежде чем они исправят себя и изменят цвет в соответствии с панелью навигации.Интересно, что сама панель навигации правильно использует фоновое изображение с самого начала.

Чтобы было ясно, я использую setBackgroundImage для UINavigationBar на устройствах iOS 5, который работает, как и ожидалось, поэтому вспышка есть только в iOS 4.

Кто-нибудь может понять, почему это произошло и / или как это исправить?

Ответы [ 2 ]

0 голосов
/ 29 февраля 2012

Элементы кнопок панели имеют неправильный цвет?Вы можете вручную установить цвет их оттенка в viewDidLoad: цвет оттенка

 navigationBar.rightBarButtonItem.tintColor = [UIColor ...]

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

Также для дальнейшего использования технически некорректно переопределять метод внутри категории.(Последняя версия Xcode, 4.3, даст вам предупреждение об этом).Вы должны либо правильно создать подкласс UINavigationBar, либо выполнить метод swizzling.Но это довольно сложно, так что не беспокойтесь об этом прямо сейчас:)

0 голосов
/ 29 февраля 2012

Если вы вызываете класс с кодом, на который ссылается viewDidLoad, попробуйте переместить его в awakeFromNib

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...