Подтвердить что ты не робот

Изменение изображения позиции вкладки и цвета текста iOS

Вот моя панель вкладок:

enter image description here

На следующем рисунке показана выполняемая программа и выбран пункт "НОВОСТИ":

enter image description here

Понятно, что цвет оттенка штриха работает нормально, как я хочу!

Но tintColor влияет только на изображение, а не на текст.

Кроме того, когда элемент выбран (как видно выше, новости), цвет элемента становится синим! Как я могу предотвратить это? Я хочу, чтобы он оставался белым.

Почему текст изменяется на белый цвет при выборе, но не когда он не выбран?

В основном я хочу, чтобы цвет элемента и цвет текста были белыми все время.

Как мне это достичь? Спасибо за любую помощь.

Требуется ли быстрый код для каждого отдельного элемента?

EDIT:

enter image description here

4b9b3361

Ответ 1

Из документов класса UITabBarItem:

По умолчанию фактические невыбранные и выбранные изображения автоматически создается из альфа-значений в исходных изображениях. к предотвращать окраску системы, предоставлять изображения с помощью UIImageRenderingModeAlwaysOriginal.

В подсказке не используется ли UIImageRenderingModeAlwaysOriginal, главное, когда его использовать.

Чтобы предотвратить серый цвет для невыделенных элементов, вам просто нужно предотвратить окраску системы для невыделенного изображения. Вот как это сделать:

var firstViewController:UIViewController = UIViewController()
// The following statement is what you need
var customTabBarItem:UITabBarItem = UITabBarItem(title: nil, image: UIImage(named: "YOUR_IMAGE_NAME")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal), selectedImage: UIImage(named: "YOUR_IMAGE_NAME"))
firstViewController.tabBarItem = customTabBarItem

Как вы можете видеть, я попросил iOS применить исходный цвет (белый, желтый, красный, любой) изображения ТОЛЬКО для состояния UNSELECTED и оставить изображение таким, как оно есть для состояния SELECTED.

Кроме того, вам может потребоваться добавить цвет оттенка для панели вкладок, чтобы применить другой цвет для состояния SELECTED (вместо голубого цвета iOS по умолчанию). Как показано на снимке выше, вы применяете белый цвет для выбранного состояния:

self.tabBar.tintColor = UIColor.whiteColor()

EDIT:

enter image description here

Ответ 2

Swift 3

Я сделал это, создав настраиваемый контроллер на вкладке и добавив этот код в метод viewDidLoad.

    if let count = self.tabBar.items?.count {
        for i in 0...(count-1) {
            let imageNameForSelectedState   = arrayOfImageNameForSelectedState[i]
            let imageNameForUnselectedState = arrayOfImageNameForUnselectedState[i]

            self.tabBar.items?[i].selectedImage = UIImage(named: imageNameForSelectedState)?.withRenderingMode(.alwaysOriginal)
            self.tabBar.items?[i].image = UIImage(named: imageNameForUnselectedState)?.withRenderingMode(.alwaysOriginal)
        }
    }

    let selectedColor   = UIColor(red: 246.0/255.0, green: 155.0/255.0, blue: 13.0/255.0, alpha: 1.0)
    let unselectedColor = UIColor(red: 16.0/255.0, green: 224.0/255.0, blue: 223.0/255.0, alpha: 1.0)

    UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: unselectedColor], for: .normal)
    UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: selectedColor], for: .selected)

Это сработало для меня!

введите описание изображения здесь

Ответ 3

стриж


Для изображения:

custom.tabBarItem = UITabBarItem(title: "Home", image: UIImage(named: "tab_icon_normal"), selectedImage: UIImage(named: "tab_icon_seelcted"))

Для текста:

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.grayColor()], forState:.Normal)

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.redColor()], forState:.Selected)

Ответ 4

Swift 4.2 и Xcode 10

Решение, которое сработало для меня:

  1. Настройка изображения - из раскадровки установить панель элементов изображения и выбранного изображения. Чтобы удалить наложение оттенков на изображениях, перейдите в каталог активов, выберите изображение и измените его режим рендеринга следующим образом:

image render mode

Это не позволит компоненту панели вкладок установить оттенок изображения по умолчанию.

  1. Текст - здесь я создал простой подкласс UITabBarController и в его методе viewDidLoad настроил цвет по умолчанию и выбрал цвет текста следующим образом:

    class HomeTabBarController: UITabBarController {
        override func viewDidLoad() {
            super.viewDidLoad()
    
            let appearance = UITabBarItem.appearance(whenContainedInInstancesOf: [HomeTabBarController.self])
            appearance.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: .black], for: .normal)
            appearance.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: .red], for: .selected)
        }
    }
    

Просто установите этот класс в качестве пользовательского класса контроллера панели вкладок в инспекторе удостоверений в IB.

Вуаля! Это.

Обновление iOS 13:

Добавьте это в свои настройки для iOS 13:

if #available(iOS 13, *) {
    let appearance = UITabBarAppearance()
    appearance.stackedLayoutAppearance.selected.titleTextAttributes = [NSAttributedString.Key.foregroundColor: .red]
    tabBar.standardAppearance = appearance
}

Ответ 5

Swift 3

Это сработало для меня (обращаясь к цветам цветов tabBarItems):

UITabBar.appearance().tintColor = ThemeColor.Blue

if let items = tabBarController.tabBar.items {
        let tabBarImages = getTabBarImages() // tabBarImages: [UIImage]
        for i in 0..<items.count {
            let tabBarItem = items[i]
            let tabBarImage = tabBarImages[i]
            tabBarItem.image = tabBarImage.withRenderingMode(.alwaysOriginal)
            tabBarItem.selectedImage = tabBarImage
        }
    }

Я заметил, что если вы установите изображение с режимом рендеринга =.alwaysOriginal, UITabBar.tintColor не имеет никакого эффекта.

Ответ 6

Swift 3

Прежде всего, убедитесь, что вы добавили клавишу BOOLEAN "Просмотр состояния панели управления на основе контроллера" в Info.plist и установите значение "НЕТ".

Appdelegate.swift

Вставить код где-нибудь после "launchOptions: [UIApplicationLaunchOptionsKey: Any]?) → Bool {"

  • Измените цвет панели вкладок с помощью значения цвета RGB:

UITabBar.appearance().barTintColor = UIColor(red: 0.145, green: 0.592, blue: 0.804, alpha: 1.00)

ИЛИ один из цветов пользовательского интерфейса по умолчанию:

UITabBar.appearance().barTintColor = UIColor.white)


  1. Измените цвет текста элементов табуляции:

Выбранный элемент

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.white], for: .selected)

Неактивные элементы

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.black], for: .normal)

  1. Чтобы изменить цвет изображения, я считаю, что самый простой способ - сделать отдельные изображения, по одному для каждого состояния.

Если вы не делаете значки с нуля, чередующиеся черно-белые версии относительно легко сделать в Photoshop.


Adobe Photoshop (почти любая версия будет делать)

Убедитесь, что изображение на значке имеет прозрачный фон, а сам значок сплошной черный (или закрыт).

Откройте файл изображения, сохраните его под другим именем файла (например, exampleFilename-Inverted.png)

В подменю "Коррекция" в меню "Изображение":

Нажмите "Инвертировать"

Теперь у вас есть отрицательный исходный значок.

В XCode установите одно из изображений как "Выбранное изображение" в разделе "Свойства панели вкладок" в раскадровке и укажите "неактивную" версию под изображением "Элемент".

Ta-Da 🍺

Ответ 7

Swift 4: в вашем UITabBarController измените его на этот код

tabBar.unselectedItemTintColor = .black

Ответ 8

Попробуйте добавить его в AppDelegate.swift (внутри приложения):

UITabBar.appearance().tintColor = UIColor(red: 0/255.0, green: 0/255.0, blue: 0/255.0, alpha: 1.0)

// For WHITE color: 
UITabBar.appearance().tintColor = UIColor(red: 255/255.0, green: 255/255.0, blue: 255/255.0, alpha: 1.0)

Пример:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Tab bar icon selected color
    UITabBar.appearance().tintColor = UIColor(red: 0/255.0, green: 0/255.0, blue: 0/255.0, alpha: 1.0)
    // For WHITE color: UITabBar.appearance().tintColor = UIColor(red: 255/255.0, green: 255/255.0, blue: 255/255.0, alpha: 1.0)
    return true
}

Пример:

введите описание изображения здесь

введите описание изображения здесь

Мой английский так плохо! Прости!: -)

Ответ 9

Swift 3.0

Я создал файл класса tabbar и написал следующий код

В viewDidLoad:

self.tabBar.barTintColor = UIColor.white
self.tabBar.isTranslucent = true

let selectedColor   = UIColor.red
let unselectedColor = UIColor.cyan

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: unselectedColor,NSFontAttributeName: UIFont(name: "Gotham-Book", size: 10)!], for: .normal)
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: selectedColor,NSFontAttributeName: UIFont(name: "Gotham-Book", size: 10)!], for: .selected)

if let items = self.tabBar.items {
    for item in items {
        if let image = item.image {
            item.image = image.withRenderingMode( .alwaysOriginal )
            item.selectedImage = UIImage(named: "(Imagename)-a")?.withRenderingMode(.alwaysOriginal)
        }
    }
}

После viewDidLoad:

   override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {

   if(item.title! == "title")
   {
    item.selectedImage = UIImage(named: "(Imagname)-a")?.withRenderingMode(.alwaysOriginal)

    }
    if(item.title! == "title")
    {
        item.selectedImage = UIImage(named: "(Imagname)-a")?.withRenderingMode(.alwaysOriginal)

    }
    if(item.title! == "title")
    {
        item.selectedImage = UIImage(named: "(Imagname)-a")?.withRenderingMode(.alwaysOriginal)

    }
    if(item.title! == "title")
    {
        item.selectedImage = UIImage(named: "(Imagname)-a")?.withRenderingMode(.alwaysOriginal)

    }
    if(item.title! == "title")
    {
        item.selectedImage = UIImage(named: "(Imagname)-a")?.withRenderingMode(.alwaysOriginal)

    }

}

в поле зрения был установлен метод загрузки, который вы должны установить для выбранного изображения, а другое изображение отображается с помощью RenderingMode и в методах делегирования панели вкладок вы задаете выбранное изображение в соответствии с заголовком

Ответ 10

Для Swift 4.0 он теперь изменился как:

tabBarItem.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.gray], for: .normal)
tabBarItem.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.blue], for: .selected)

Вам не нужно создавать подкласс UITabBarItem, если требуется только изменить цвет текста. Просто поместите приведенный выше код в функцию viewDidLoad контроллера viewDidLoad.

Для глобальных настроек измените tabBarItem на UITabBarItem.appearance().

Ответ 11

вы можете установить tintColor UIBarItem:

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.magentaColor()], forState:.Normal)
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.redColor()], forState:.Selected)

Ответ 12

Вы также можете сделать так:

override func viewWillLayoutSubviews() {  
  if let items = self.tabBar.items {
    for item in 0..<items.count {
      items[item].image = items[item].image?.withRenderingMode(.alwaysOriginal)
            items[item].selectedImage = items[item].selectedImage?.withRenderingMode(.alwaysTemplate)
    }

Необязательный:

 UITabBar.appearance().tintColor = UIColor.red

Я надеюсь, что это поможет вам.

Ответ 13

Этот код работает для Swift 4, если вы хотите изменить изображение элемента панели вкладок при нажатии. Скопируйте и вставьте в первый метод viewDidLoad, который используется в проекте.

let arrayOfImageNameForSelectedState: [String] = ["Image1Color", "Image2Color", "Image3Color"] let arrayOfImageNameForUnselectedState: [String] = ["Image1NoColor", "Image2NoColor", "Image3NoColor]

    print(self.tabBarController?.tabBar.items?.count)

    if let count = self.tabBarController?.tabBar.items?.count {
        for i in 0...(count-1) {
            let imageNameForSelectedState   = arrayOfImageNameForSelectedState[i]
            print(imageNameForSelectedState)
            let imageNameForUnselectedState = arrayOfImageNameForUnselectedState[i]
            print(imageNameForUnselectedState)
            self.tabBarController?.tabBar.items?[i].selectedImage = UIImage(named: imageNameForSelectedState)?.withRenderingMode(.alwaysOriginal)
            self.tabBarController?.tabBar.items?[i].image = UIImage(named: imageNameForUnselectedState)?.withRenderingMode(.alwaysOriginal)
        }
    }

Ответ 14

Из здесь.

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

Используйте поле Image Tint (selectedImageTintColor), чтобы указать цвет оттенков штриховых элементов при выборе этой вкладки. По умолчанию этот цвет синий.

Ответ 15

В Swift 4.2:

UITabBarItem.appearance().setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.white], for: .normal)
UITabBarItem.appearance().setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.red], for: .selected)

Ответ 16

Я знаю, что здесь много ответов, но я не могу найти простой и действительный ответ для копирования/вставки для Swift 4.2.

tabBarController?.tabBar.tintColor = UIColor.red
tabBarController?.tabBar.unselectedItemTintColor = UIColor.green

Или используйте UITabBarItem.appearance() вместо tabBarController?.tabBar

Изображения должны быть UIImageRenderingModeAlwaysTemplate

Ответ 17

Просто добавьте новую ссылку UITabBarController к проекту. Далее создайте ссылку UITabBar в этом контроллере:

@IBOutlet weak var appTabBar: UITabBar!

В viewDidLoad() просто добавьте ниже цвет текста заголовка:

    appTabBar.tintColor = UIColor.scandidThemeColor()

Для изображения

    tabBarItem = UITabBarItem(title: "FirstTab", image: UIImage(named: "firstImage"), selectedImage: UIImage(named: "firstSelectedImage"))

Ответ 18

Подкласс вашего TabbarViewController и в ViewDidLoad положить этот код:

 [UITabBarItem.appearance setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor darkGreyColorBT]} forState:UIControlStateNormal];
    [UITabBarItem.appearance setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor nightyDarkColorBT]} forState:UIControlStateSelected];

    self.tabBar.items[0].image  = [[UIImage imageNamed:@"ic-pack [email protected]"]  imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.tabBar.items[0].selectedImage  = [[UIImage imageNamed:@"[email protected]"]  imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.tabBar.items[1].image = [[UIImage imageNamed:@"ic-sleeptracker [email protected]"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.tabBar.items[1].selectedImage  = [[UIImage imageNamed:@"[email protected]"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.tabBar.items[2].image = [[UIImage imageNamed:@"ic-profile [email protected]"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.tabBar.items[2].selectedImage  = [[UIImage imageNamed:@"[email protected]"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

Это самое простое рабочее решение, которое у меня есть