2013-12-11 1 views
0

Я пытаюсь установить другой цвет на панель UINavigation в приложении iPhone. Мое приложение работает в прошивкой 7 и фрагмент кода, который я использую нижеНевозможно установить цвет в панели UINavigation - iOS

NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."]; 
if ([[ver objectAtIndex:0] intValue] >= 7) { 
    self.navigationController.navigationBar.barTintColor = [UIColor redColor]; 
    self.navigationController.navigationBar.translucent = NO; 
}else { 
    self.navigationController.navigationBar.tintColor = [UIColor redColor]; 
} 

Но приведенный выше код не меняется цвет панели навигации на красный. Я что-то упускаю. Не могли бы вы мне помочь. Благодаря

+0

где вы добавление делегата файл кода или ?? – Yohan

+0

убедитесь, что ваш 'self.navigationController' не должен быть nil. –

+0

И попробуйте 'if ([[[UIDevice currentDevice] systemVersion] floatValue]> = 7)' вместо этого использовать массив. –

ответ

3

Поместите код ниже в didFinishLaunchingWithOptions в вашем AppDelegate

if ([self checkOSVersion] >= 7) { 
    [[UINavigationBar appearance] setBarTintColor:[UIColor redColor]]; 
    [[UINavigationBar appearance] setTranslucent:NO]; 
} else { 
    [[UINavigationBar appearance] setTintColor:[UIColor redColor]]; 
} 

- (int)checkOSVersion { 

    NSArray *ver = [[[UIDevice currentDevice] systemVersion] componentsSeparatedByString:@"."]; 
    int osVerson = [[ver objectAtIndex:0] intValue]; 
    return osVerson; 
} 
+0

Спасибо большое manujmv. Это сработало. –

+0

добро пожаловать. счастливое кодирование :) – manujmv

1

Для добавления цвета для всех навигационной панели по умолчанию установлен ниже код в appdelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 
    [[UINavigationBar appearance] setBarTintColor:[UIColor yellowColor]]; 
    return YES; 
} 

или же хотите для установки цвета для определенных средств просмотра, затем используйте это

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.navigationController.navigationBar.barTintColor = [UIColor grayColor]; 

} 

Если вы хотите узнать больше попробовать эту ссылку, это хорошо check this link

+0

Большое спасибо Yohan. Это сработало. –

+0

Рад помочь вам – Yohan

0

Я бы сказал, что это провал, если заявление if ([[ver objectAtIndex:0] intValue] >= 7). Я хотел бы заменить, что весь if statement с:

if([[[UIDevice currentDevice] systemVersion] intValue] >= 7) { 
    // Do the below if you want to set the bar tint color for every UINavigationBar 
    // [[UINavigationBar appearance] setBarTintColor:[UIColor redColor]]; 
    // [[UINavigationBar appearance] setTranslucent:NO]; 
    [[[self navigationController] navigationBar] setBarTintColor:[UIColor redColor]]; 
    [[[self navigationController] navigationBar] setTranslucent:NO]; 

} else { 
    // Do the below if you want to set the bar tint color for every UINavigationBar 
    // [[UINavigationBar appearance] setTintColor:[UIColor redColor]]; 
    [[[self navigationController] navigationBar] setTintColor:[UIColor redColor]]; 
} 

[[UIDevice currentDevice] systemVersion]; вернет NSString *, что может быть что угодно, от 7 до 7.0.1. Выполнение floatValue будет возвращать по крайней мере 7.0, как это добавит 0 в конце концов, если он просто возвращает 7, поэтому мы хотим, чтобы всегда дать нам только начальную системную версию 7 так что нам нужно сделать intValue на конце, так это выглядит, как [[[UIDevice currentDevice] systemVersion] intValue]; забыть о методе componentSeperatedByString: не нужно вообще для этого, это вызовет больше проблем, чем вы хотите.

Вы также мог бы сделать этот вид if statement

if (floor(NSFoundationVersionNumber) >= NSFoundationVersionNumber_iOS_7_0) { 
    // Everything above and including iOS 7.0 
} else { 
    // Everything below iOS 7.0 
} 
Смежные вопросы