Как изменить цвет панели навигации в iOS 7 или 6?

Я хочу изменить цвет цвета панели навигации, но я не уверен, следует ли менять оттенок или фон. Я знаю, что iOS 7 собирается более плоский дизайн (даже рекомендующий удаление градиентов), но у меня возникают проблемы с расшифровкой этих двух. Даже если я устанавливаю фоновый цвет, он ничего не делает.

На этом изображении фон установлен на зеленый, но панель все еще голубая:

Enter image description here

Ответ 1

Поведение tintColor для баров изменилось на iOS 7.0. Он больше не влияет на фоновый фон и ведет себя так, как описано для свойства tintColor, добавленного в UIView. Чтобы подкрасить фоновый фон, используйте -barTintColor.

navController.navigationBar.barTintColor = [UIColor navigationColor];

Ответ 2

Если вы хотите иметь сплошной цвет для своей панели навигации в iOS 6, похожей на iOS 7, используйте это:

[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBackgroundColor:[UIColor greenColor]];

в iOS 7 используйте barTintColor следующим образом:

navigationController.navigationBar.barTintColor = [UIColor greenColor];

или

 [[UINavigationBar appearance] setBarTintColor:[UIColor greenColor]];

Ответ 3

//В ios 7: -

[self.navigationController.navigationBar setBarTintColor:[UIColor yellowColor]];

//В ios 6: -

[self.navigationController.navigationBar setTintColor:[UIColor yellowColor]];

Ответ 4

Свойство цвета фона игнорируется на UINavigationBar, поэтому, если вы хотите отрегулировать внешний вид, вам нужно либо использовать tintColor, либо вызвать некоторые другие методы, перечисленные в разделе "Настройка внешнего вида панели" ссылка класса UINavigationBar (например, setBackgroundImage:forBarMetrics:).

Имейте в виду, что свойство tintColor работает по-разному в iOS 7, поэтому, если вы хотите, чтобы последовательный просмотр между iOS 7 и предыдущей версией с использованием фонового изображения мог быть вашим лучшим выбором. Также стоит отметить, что вы не можете настроить фоновое изображение в раскадровке, вам нужно создать IBOutlet для вашего UINavigationBar и изменить его в viewDidLoad или в другом подходящем месте.

Ответ 5

Еще одна вещь, если вы хотите изменить цвет навигации bg в UIPopover, вам нужно установить barStyle в UIBarStyleBlack

if([UINavigationBar instancesRespondToSelector:@selector(barTintColor)]){ //iOS7
    navigationController.navigationBar.barStyle = UIBarStyleBlack;
    navigationController.navigationBar.barTintColor = [UIColor redColor];
}

Ответ 6

Вот как правильно установить его для iOS 6 и 7.

+ (void)fixNavBarColor:(UINavigationBar*)bar {
    if (iosVersion >= 7) {
        bar.barTintColor = [UIColor redColor];
        bar.translucent = NO;
    }else {
        bar.tintColor = [UIColor redColor];
        bar.opaque = YES;
    }
}

Ответ 7

Полный код с проверкой версий.

 if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) {

    // do stuff for iOS 7 and newer
    [self.navigationController.navigationBar setBarTintColor:[UIColor yellowColor]];
}
else {

    // do stuff for older versions than iOS 7
    [self.navigationController.navigationBar setTintColor:[UIColor yellowColor]];
}

Ответ 8

Вы можете проверить версию iOS и просто установить цвет оттенка панели навигации.

if (SYSTEM_VERSION_LESS_THAN(@"7.0")) {
    self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:0.9529 green:0.4392 blue:0.3333 alpha:1.0];
}else{

    self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:0.9529 green:0.4392 blue:0.3333 alpha:1.0];
    self.navigationItem.leftBarButtonItem.tintColor = [UIColor whiteColor];
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}

Ответ 9

Основанный на ответе ответил, это сработало для меня:

/* check for iOS 6 or 7 */
if ([[self navigationController].navigationBar respondsToSelector:@selector(setBarTintColor:)]) {
    [[self navigationController].navigationBar setBarTintColor:[UIColor whiteColor]];

} else {
    /* Set background and foreground */
    [[self navigationController].navigationBar setTintColor:[UIColor whiteColor]];
    [self navigationController].navigationBar.titleTextAttributes = [[NSDictionary alloc] initWithObjectsAndKeys:[UIColor blackColor],UITextAttributeTextColor,nil];
}

Ответ 10

    you can add bellow code in appdelegate.m .if your app is navigation based

    // for background color
   [nav.navigationBar setBarTintColor:[UIColor blueColor]];

    // for change navigation title and button color
    [[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor],
    NSForegroundColorAttributeName,               
    [UIFont fontWithName:@"FontNAme" size:20],
    NSFontAttributeName, nil]];
    [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];

Ответ 11

Вставьте приведенный ниже код в doneFinishLaunchingWithOptions() в AppDelegate.m

[[UINavigationBar appearance] setBarTintColor:[UIColor
    colorWithRed:26.0/255.0 green:184.0/255.0 blue:110.0/255.0 alpha:1.0]];

Ответ 12

Я использую следующий код (в С#), чтобы изменить цвет NavigationBar:

NavigationController.NavigationBar.SetBackgroundImage (new UIImage (), UIBarMetrics.Default);
NavigationController.NavigationBar.SetBackgroundImage (new UIImage (), UIBarMetrics.LandscapePhone);
NavigationController.NavigationBar.BackgroundColor = UIColor.Green;

Фокус в том, что вам нужно избавиться от фонового изображения по умолчанию, а затем появится цвет.

Ответ 13

Если вы хотите изменить цвет панели навигации, используйте свойство barTintColor. Кроме того, если вы установите для него цвет tintColor, это влияет на элемент навигационной панели, как на кнопку.

FYI, вы хотите сохранить панель стилей iOS 6, сделать фоновое изображение похожим на предыдущий стиль и установить его.

Более подробную информацию вы можете получить по следующей ссылке:

https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/AppearanceCustomization.html

Ответ 14

В iOS7, если ваш контроллер навигации содержится в панели вкладок, splitview или в каком-либо другом контейнере, то для глобального изменения вида навигационной панели используйте следующий метод::

[[UINavigationBar appearanceWhenContainedIn:[UITabBarController class],nil] setBarTintColor:[UIColor blueColor]];

Ответ 15

Попробуйте выполнить код ниже в - (void)viewDidLoad вашего ViewController.m

[[[self navigationController] navigationBar] setTintColor:[UIColor yellowColor]];

это работало для меня в iOS 6.. Попробуйте..

Ответ 16

Я не уверен в изменении оттенка и цвета фона, но так вы изменяете цвет оттенка панели навигации:

Попробуйте этот код..

[navigationController.navigationBar setTintColor:[UIColor redColor];//Красный как пример.