Изменение цвета навигационных элементов по всему приложению?

Я пытаюсь изменить оттенок. Цвет задней кнопки в iOS 7. Теперь Есть ли способ изменить все элементы навигации по всему приложению на определенный цвет? Это то, что я имею в одном контроллере представления на данный момент:

self.editButtonItem.tintColor = [UIColor whiteColor];
    self.navigationItem.backBarButtonItem.tintColor = [UIColor whiteColor];
    self.navigationController.navigationBarHidden = NO;
    self.navigationController.navigationBar.barTintColor = [UIColor redColor];
    self.navigationController.navigationBar.translucent = NO;
    self.title = @"Inbox";
    self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName : [UIColor whiteColor]};

Ответ 1

UINavigationItem не является представлением и не имеет цвета.

Вместо этого вы хотите изменить цвет оттенка UIBarButtonItem.

Используя прокси-сервер UIAppearance, вы можете сделать

[[UIBarButtonItem appearance] setTintColor:[UIColor whiteColor]];

Это изменит tintColor каждого UIBarButtonItem в приложении.

Вы можете использовать ту же стратегию для изменения UINavigationBar barTintColor и titleTextAttributes:

[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]]; // this will change the back button tint
[[UINavigationBar appearance] setBarTintColor:[UIColor redColor]];
[[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];

К сожалению нет способа изменить свойство translucent с помощью прокси-сервера, поэтому вам придется делать это на каждом баре.

Ответ 2

Быстрый ответ

UINavigationBar.appearance().backgroundColor = UIColor.blackColor()
UINavigationBar.appearance().barTintColor = UIColor.blackColor()
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
UINavigationBar.appearance().tintColor = UIColor.blackColor()
UIBarButtonItem.appearance().tintColor = UIColor.blackColor()
UITabBar.appearance().backgroundColor = UIColor.blackColor()
UITabBar.appearance().tintColor = UIColor.blackColor()
UITabBar.appearance().unselectedItemTintColor = UIColor.darkGrayColor()

поместите его в приложение приложения AppDelegate (приложение: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

Ответ 3

Начиная с iOS7 вы можете установить оттенок для всех элементов навигации только для того, чтобы поддерживать постоянный внешний вид и приложение во всем приложении:

 if ([self.window respondsToSelector:@selector(setTintColor:)]) {
        self.window.tintColor = [UIColor redColor];
}

Также посмотрите на мой ответ здесь для рекомендуемых материалов для чтения и просмотра: Ошибка StatusBar в iOS7?

Ответ 4

В методе superViewDidLoad.

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

он изменит цвет цвета навигационного элемента. И то же самое произойдет с кнопкой.

Ответ 5

Это работает для изменения цвета кнопки:

   [[UINavigationBar appearance] setTintColor:[UIColor redColor]];

Протестировано с iOS 9.3, iPhone и iPad. Заголовок navigationBar по-прежнему будет окрашен цветом по умолчанию. Это было немного запутанно.

Ответ 6

Для цвета метки заголовка мы можем использовать

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]