Цвет панели ввода-вывода 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.
Ищите глобальную настройку оттенков.