2016-09-08 4 views
8

В Swift 2 я использовал атрибут Runtime User Defined Runtime в Storyboard с помощью ключевого пути tintColor, чтобы изменить цвета значков элементов панели табуляции. Однако похоже, что tintColor был удален с помощью Swift 3. Как изменить выбранный цвет элементов панели вкладок в контроллере панели вкладок в Swift 3?Цвет панели вкладок в Swift 3?

Спасибо!

EDIT: Прикрепленный скриншот

enter image description here

+0

Пробовал в Xcode 8 стремительных 3, работает отлично , Вы задаете цвет оттенка для панели вкладок или одного из элементов панели? –

+0

Спасибо за ответ! Я пытаюсь установить цвет отдельных элементов. Я просто прикрепил скриншот. – winston

ответ

10

Использование tabBarItem.setTitleTextAttributes изменить цвет текста отдельных элементов стержневых.
Поместите это в viewDidLoad методе каждой вкладки:

self.tabBarItem.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.red()], for:.selected) 

Чтобы изменить значок и текст оттенок цвета вместе простое решение, чтобы изменить цвет TabBar оттенок в методе viewWillAppear каждой вкладки:

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
    self.tabBarController?.tabBar.tintColor = UIColor.red() 
} 

Другим решением для изменения цвета оттенка изображения является создание расширения для UIImage и использование его для изменения выбранного изображения с помощью пользовательский Оттенок:

extension UIImage { 
    func tabBarImageWithCustomTint(tintColor: UIColor) -> UIImage { 
     UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale) 
     let context: CGContext = UIGraphicsGetCurrentContext()! 

     context.translate(x: 0, y: self.size.height) 
     context.scale(x: 1.0, y: -1.0) 
     context.setBlendMode(CGBlendMode.normal) 
     let rect: CGRect = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height) 

     context.clipToMask(rect, mask: self.cgImage!) 

     tintColor.setFill() 
     context.fill(rect) 

     var newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()! 
     UIGraphicsEndImageContext() 

     newImage = newImage.withRenderingMode(UIImageRenderingMode.alwaysOriginal) 
     return newImage 
    } 
} 

Используйте этот код, чтобы изменить выбранное изображение:

self.tabBarItem.selectedImage = self.tabBarItem.selectedImage?.tabBarImageWithCustomTint(tintColor: UIColor.red()) 
+0

Извините, я должен был быть более конкретным. Я хочу изменить цвет значка. Я уже понял, как изменить текст. Благодаря! – winston

+0

@james, пожалуйста, см. Мой отредактированный ответ. –

+0

Это отлично работает. Благодаря!! – winston

0

последнего код, как вол Swift 3 является

extension UIImage { 

    func tabBarImageWithCustomTint(tintColor: UIColor) -> UIImage { 

     UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale) 
     let context: CGContext = UIGraphicsGetCurrentContext()! 

     context.translateBy(x: 0, y: self.size.height) 
     context.scaleBy(x: 1.0, y: -1.0) 
     context.setBlendMode(CGBlendMode.normal) 
     let rect: CGRect = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height) 

     context.clip(to: rect, mask: self.cgImage!) 

     tintColor.setFill() 
     context.fill(rect) 

     var newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()! 
     UIGraphicsEndImageContext() 

     newImage = newImage.withRenderingMode(UIImageRenderingMode.alwaysOriginal) 
     return newImage 
    } 
} 
Смежные вопросы