Цвет панели ввода-вывода IOS 8

Я пытался найти решение этой проблемы на прошлой неделе, и мне не повезло после того, как я попытался найти все возможные решения, которые я мог найти или подумать. Каждое решение, которое я нашел и попыталось, либо не работало, либо устарело.

У меня есть 5 UITabBarItem в UITabBar, помещенный в UITabBarController. Я хочу изменить цвет фона UITabBarItem, когда он выбран, и, конечно, изменить его, когда выбранный элемент изменится.

Я использую Swift и iOS SDK 8.3 в Xcode 6.3.1. Если вы можете отвечать только в Objective-C, это тоже хорошо, любой ответ поможет! Спасибо всем заблаговременно, я действительно ценю это!

EDIT: Вот визуальный пример того, что я хотел бы сделать.

Различные цвета фона

Ответы

Ответ 1

В вашем tabBarController вы можете установить tintColor UITabBar по умолчанию, barTintColor, selectionIndicatorImage (здесь немного обмануть) и renderMode изображений, см. комментарии ниже:

    class MyTabBarController: UITabBarController, UINavigationControllerDelegate {
      ...
      override func viewDidLoad() {
        ...
        // Sets the default color of the icon of the selected UITabBarItem and Title
        UITabBar.appearance().tintColor = UIColor.redColor()

        // Sets the default color of the background of the UITabBar
        UITabBar.appearance().barTintColor = UIColor.blackColor()

        // Sets the background color of the selected UITabBarItem (using and plain colored UIImage with the width = 1/5 of the tabBar (if you have 5 items) and the height of the tabBar)
        UITabBar.appearance().selectionIndicatorImage = UIImage().makeImageWithColorAndSize(UIColor.blueColor(), size: CGSizeMake(tabBar.frame.width/5, tabBar.frame.height))

        // Uses the original colors for your images, so they aren't not rendered as grey automatically.
        for item in self.tabBar.items as! [UITabBarItem] {
          if let image = item.image {
            item.image = image.imageWithRenderingMode(.AlwaysOriginal)
          }
        }
      }
      ...
    }

И вы захотите расширить класс UIImage, чтобы сделать обычное цветное изображение с нужным вам размером:

extension UIImage {
  func makeImageWithColorAndSize(color: UIColor, size: CGSize) -> UIImage {
    UIGraphicsBeginImageContextWithOptions(size, false, 0)
    color.setFill()
    UIRectFill(CGRectMake(0, 0, size.width, size.height))
    var image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return image
  }
}

Ответ 2

Вы можете попробовать это. Добавьте это в AppDelegate.swift.

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.

        UITabBar.appearance().translucent = false
        UITabBar.appearance().barTintColor = UIColor(rgba: "#12296f")
        UITabBar.appearance().tintColor = UIColor.whiteColor()

        return true
    }

Не забудьте включить эту библиотеку. https://github.com/yeahdongcn/UIColor-Hex-Swift

Ответ 3

Вдохновленный Гвендле, я решил это:

override func viewWillAppear(animated: Bool) {
    guard let tabBar = tabBarController?.tabBar else { return }
    tabBar.tintColor = UIColor.whiteColor()
    tabBar.selectionIndicatorImage = UIImage().makeImageWithColorAndSize(UIColor.redColor(), size: CGSizeMake(tabBar.frame.width/5, tabBar.frame.height))
    super.viewWillAppear(animated)
}

А также использовал расширение:

extension UIImage {
    func makeImageWithColorAndSize(color: UIColor, size: CGSize) -> UIImage {
        UIGraphicsBeginImageContext(size)
        color.setFill()
        UIRectFill(CGRectMake(0, 0, size.width, size.height))
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image
}

Имейте в виду, что после установки selectionIndicationImage он остается установленным для всех ваших других вкладок. Вот пример, как удалить его, установив его на нуль в каждом другом контроллере представления на остальных вкладках:

override func viewWillAppear(animated: Bool) {
    tabBarController?.tabBar.tintColor = UIColor.redColor()
    tabBarController?.tabBar.selectionIndicatorImage = nil
    super.viewWillAppear(animated)
}

Реализовано с использованием Swift 2.

Ответ 4

Вы пробовали это?

Выберите изображение значка панели вкладок в контроллере вида в раскадровке.

Посмотрите на вкладке "Идентификация и тип" (слева) (это выглядит как лист бумаги) на правой панели xcode.

Ищите глобальную настройку оттенков.