Свойство 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;
}
Также вы можете изменить этот подход, создав Category для UINavigationController и реализовав метод swizzling для initWithRootViewController:
P.S. Вчера мое новое приложение появилось в AppStore без каких-либо проблем с этим подходом.