Изменить цвет панели вкладок выбранного цвета в раскадровке


175

Я хочу изменить элементы панели вкладок на розовый, если они выбраны вместо синего по умолчанию.

Как я могу сделать это, используя редактор раскадровки в Xcode 6?

Вот мои текущие настройки, которые не работают, синий фон работает, но розовый не работает:

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


Возможный дубликат tab-bar-item-tint-color !
User31

Проверьте этот ответ, он поможет вам в решении: stackoverflow.com/a/58727092/7804300
Талха Ахмед

Ответы:


408

Добавьте атрибут Цвета времени выполнения с именем "tintColor" из StoryBoard. Это работает ( для Xcode 8 и выше ).

если вы хотите невыбранный цвет .. вы можете добавить unselectedItemTintColorтоже.

установка tintColor в качестве атрибута времени выполнения


24
это сработало для меня, когда я добавил это свойство в UITabBarItem, а не в UITabBar.
Sourabh86

1
Но как установить элемент панели вкладок Не выбранный цвет в раскадровке?
Питер

1
Идеально подходит для моего случая - мне нужно, чтобы мои пять элементов tabBar были уникальными цветами при выборе. Я был в состоянии установить время выполнения этого атрибута на UITabBarItem, на UINavigationControllerподключен к моему TabBar , и она работает безупречно. И все без написания какого-либо кода, и это здорово, так как я повторно использую класс VC. Спасибо!
rosshump

7
и наоборот - это единственный подход, который работает на iOS 10 (кажется, что оттенок из панели атрибутов не работает, и атрибут времени выполнения "tintColor" uitabbaritem тоже не работает.
Luk

5
StackOverflow 1: Apple 0
Шарух Мастан,

175

Это элегантное решение прекрасно работает на SWIFT 3.0 , SWIFT 4.2 и SWIFT 5.1 :

На раскадровке:

  1. Выберите панель вкладок
  2. Установите время выполнения атрибутого объявления называется tintColor для желаемого цвета выбранного значка на панели вкладок
  3. Установите время выполнения атрибутого объявления называется unselectedItemTintColor для желаемого цвета Unselected иконы на панели вкладок

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

Изменить: Работа с Xcode 8/10, для iOS 10/12 и выше .


6
Большое спасибо. unselectedItemTintColor находит очень редко
Руши триведи

4
'unselectedItemTintColor' идеальное решение для меня, спасибо.
fozoglu

Будет ли это работать, если цель развертывания 8.0 или 9.0? Я использовал быстрые 3.0 и Xcode 8.0 для развития
Мамт

2
Важно выбрать панель вкладок, действительно работал в Swift 4 для меня.
Минусы Bulaquena

2
Превосходно! Все еще работает над xCode 10 :) не обновляет визуальный редактор, но работает после компиляции :)
Михаил Минков

64

В Swift, используя xcode 7 (и более поздние версии), вы можете добавить следующее в свой файл AppDelegate.swift:

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 {

    // I added this line
    UITabBar.appearance().tintColor = UIColor(red: 255/255.0, green: 255/255.0, blue: 255/255.0, alpha: 1.0)

    return true
}

В приведенном выше примере мой элемент будет белым. «/255.0» необходим, потому что он ожидает значение от 0 до 1. Для белого я мог бы просто использовать 1. Но для другого цвета вы, вероятно, будете использовать значения RGB.


3
Кажется, ни один другой метод не работает (больше.) Это работает!
Тедди

@ Джаррод Я дурачился с этим почти 1 час, у этого ответа должно быть больше голосов. Спасибо!
Ланс Самария

53

На Xcode8я изменился ImageTintс раскадровки и он хорошо работает.

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

Результат:

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


1
При использовании пользовательских изображений Это один , который работал для меня
Juanjo

1
Это должен быть принятый ответ. Не требует атрибута времени выполнения, что означает, что это работает на экранах запуска!
Крис Дуглас

18

Свифт 3 | Xcode 10

Если вы хотите, чтобы все элементы панели вкладок были одинакового цвета (выбраны и не выбраны) ...


Шаг 1

Убедитесь, что ваши графические ресурсы настроены на Render As = Template Image . Это позволяет им наследовать цвет.

Активы XCode


Шаг 2

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

  • Установите Tab Tab: Image Tint на цвет, который вы хотите, чтобы выбранный значок унаследовал.
  • Установите Tab Tab: Bar Tint на цвет, который вы хотите, чтобы панель вкладок была.
  • Установите View: оттенок на цвет, который вы хотите видеть в редакторе раскадровки, это не влияет на цвет значка при запуске вашего приложения.

Редактор раскадровки Xcode


Шаг 3

Шаги 1 и 2 изменят цвет выбранного значка. Если вы все еще хотите изменить цвет невыбранных элементов, вам нужно сделать это в коде. Я не нашел способ сделать это через редактор раскадровки.

Создать пользовательский класс контроллера панели вкладок ...

//  TabBarController.swift

class TabBarController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // make unselected icons white
        self.tabBar.unselectedItemTintColor = UIColor.white
    }
}

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

Редактор раскадровки Xcode


Если вы выясните, как изменить невыбранный цвет значка с помощью редактора раскадровки, пожалуйста, дайте мне знать. Спасибо!


self.tabBar.unselectedItemTintColor = UIColor.white self.tabBar.tintColor = #colorLiteral(red: 0.2, green: 0.7333333333, blue: 0.3450980392, alpha: 1) Работа для меня
Wahab Khan Jadon

9

поместите этот код в viewDidLoad контроллера представления, который вы хотите изменить цвет

[[UITabBar appearance] setSelectedImageTintColor:[UIColor whiteColor]];

1
Нет ли способа изменить все вкладки?
Декор

Просто поместите код с тем же цветом в представление загрузил все ваши вкладки
Ник

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

Там нет такого метода setSelectedImageTintColor
Мадху Авинаш


7

XCode 8.2, iOS 10, Swift 3: теперь есть unselectedItemTintColorатрибут для tabBar:

self.tabBar.unselectedItemTintColor = UIColor(red: 0/255.0, green: 200/255.0, blue: 0/255.0, alpha: 1.0)

6

Вы можете изменить цвета UITabBarItem по раскадровке, но если вы хотите изменить цвета по коду, это очень просто:

// Используем это для изменения цвета выбранного бара

   [[UITabBar appearance] setTintColor:[UIColor blueColor]];

// Это для изменения невыбранной панели (iOS 10)

   [[UITabBar appearance] setUnselectedItemTintColor:[UIColor yellowColor]];

// И эта строка для изменения цвета всей вкладки

   [[UITabBar appearance] setBarTintColor:[UIColor whiteColor]];

setUnselectedItemTintColor предназначен только для iOS 10
ondermerol

5

Так или иначе, мы не можем изменить выбранный элемент панели вкладок «Цветовой оттенок», используя только раскадровку, поэтому я добавил код ниже в моем ViewDidLoad, надеюсь, это поможет.

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

5

Добавьте этот код в функцию делегата приложения -did_finish_launching_with_options

UITabBar.appearance().tintColor = UIColor( red: CGFloat(255/255.0), green: CGFloat(99/255.0), blue: CGFloat(95/255.0), alpha: CGFloat(1.0) )

поставить RGB нужного цвета


4

Это решение в Swift 3, которое работает в iOS 10:

Во-первых, вы создаете свой собственный подкласс контроллера панели вкладок и добавляете его в свой контроллер вкладок в раскадровке. В viewDidLoad()методе вы можете настроить панель вкладок. Здесь следует указать, что tintColorатрибут tabBarпредставляет цвет выбранного элемента, а не цвет невыбранных! Чтобы изменить цвет невыбранных элементов, я рекомендую перебирать каждый элемент и использовать оригинальные цвета ваших изображений, чтобы они не отображались серым цветом автоматически.

class CustomTabBarVC: UITabBarController
{
    override func viewDidLoad()
    {
        super.viewDidLoad()

        self.tabBar.tintColor = AppColor.normalRed
        self.tabBar.barTintColor = .white
        self.tabBar.isTranslucent = true

        if let items = self.tabBar.items
        {
            for item in items
            {
                if let image = item.image
                {
                    item.image = image.withRenderingMode( .alwaysOriginal )
                }
            }
        }
    }
}

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


Сложно. Ответ Джаррода хорошо работает со всеми иконками.
Хосе Рамирес

4

Это лучший способ, чтобы измениться Image Tintв раскадровке


2

Вы можете создать подкласс UITabBarControllerи заменить его на раскадровку. В вашей viewDidLoadреализации подкласса вызовите это:

[self.tabBar setTintColor:[UIColor greenColor]];

'UITabBar' does not have a member named 'setSelectedImageTintColor'
Получение

Также я использую swift, поэтому я поставил: self.tabBar.setSelectedImageTintColor = UIColor.greenColorне уверен, правильно ли это или нет
Deekor

2
@Deekor это tintColorне так selectedImageTintColor, кстати selectedImageTintColor, устарела в iOS 8.
chancyWu
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.