Как настроить tintColor и изменить размер UITabBarItem

Проблемы, которые я хотел бы изменить «Цвет оттенка» для каждой вкладки. Но приведенный ниже код вообще не работает.

Я добавил изображение кнопки и хочу изменить его размер с помощью «UIEdgeInsetsMake». Но размер кнопки странным образом меняется всякий раз, когда я нажимаю на нее. Не знаю почему.

И я использую Swift 3.

   class MainView: UITabBarController {

    var TabFirst = UITabBarItem()
    var TabSecond = UITabBarItem()
    var TabThird = UITabBarItem()
    var TabForth = UITabBarItem()
    var TabFifth = UITabBarItem()

    override func viewDidLoad() {
        super.viewDidLoad()

        tabBar.barTintColor = UIColor.white

        TabFirst = self.tabBar.items![0]
        TabFirst.image = UIImage(named: "btn_1-1")!//.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
        TabFirst.imageInsets = UIEdgeInsetsMake(12, 10, 11, 11)
        tabBar.items?[0].title = "length"

        TabSecond = self.tabBar.items![1]
        TabSecond.image = UIImage(named: "btn_2-1")!//.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
        tabBar.items?[1].title = "length"

        TabThird = self.tabBar.items![2]
        TabThird.image = UIImage(named: "btn_3-1")!//.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
        tabBar.items?[2].title = "length"

        TabForth = self.tabBar.items![3]
        TabForth.image = UIImage(named: "btn_4-1")!//.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
        tabBar.items?[3].title = "length"

        TabFifth = self.tabBar.items![4]
        TabFifth.image = UIImage(named: "btn_5-1")!//.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
        tabBar.items?[4].title = "length"

    }



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

        switch item.tag{
        case 0:
            print("FirstTab")
            UITabBar.appearance().tintColor = UIColor(red: 255/255.0, green: 67/255.0, blue: 99/255.0, alpha: 1.0)

        case 1:
            print("SecondTab")
            UITabBar.appearance().tintColor = UIColor(red: 237/255.0, green: 193/255.0, blue: 53/255.0, alpha: 1.0)

        case 2:
            print("ThirdTab")
            UITabBar.appearance().tintColor = UIColor(red: 70/255.0, green: 183/255.0, blue: 128/255.0, alpha: 1.0)

        case 3:
            print("ForthTab")
            UITabBar.appearance().tintColor = UIColor(red: 12/255.0, green: 195/255.0, blue: 199/255.0, alpha: 1.0)

        case 4:
            print("FifthTab")
            UITabBar.appearance().tintColor = UIColor(red: 105/255.0, green: 72/255.0, blue: 170/255.0, alpha: 1.0)

        default:
            break
        }
    }

    override func viewWillAppear(_ animated: Bool) {
        UIApplication.shared.isStatusBarHidden = false
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}

person Frozen Sea    schedule 04.02.2017    source источник
comment
stackoverflow.com/questions/27890936/ Вместо этого вы должны изменить выбранное изображение, но если вы хотите тонировать: stackoverflow.com/questions/20783193/   -  person    schedule 04.02.2017
comment
@Sneak Я хотел бы изменить только TintColor, а не способ изменения изображений. И есть ли способ изменить это с помощью программного кода? не используете меню раскадровки? И еще я очень хочу решить задачи ИЗМЕНИТЬ РАЗМЕР.   -  person Frozen Sea    schedule 04.02.2017


Ответы (1)


РЕДАКТИРОВАТЬ: в вашем операторе переключения отсутствуют разрывы:

switch item.tag{

Кроме того, вы переключаете тег, и я не вижу нигде, где вы пометили их соответствующим образом в своем коде. Вместо этого вы должны получить индекс элемента.

Я не программист на Swift, вот как вы это делаете в Objective-C, чтобы дать вам подсказку:

NSInteger indexOfTab = [[self.tabBar items] indexOfObject:item];

Затем вы выполняете оператор переключения indexOfTab.

Вот Swift версия.:

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
    print("the selected index is : \(tabBar.items.index(of: item))")
}

Если вы хотите индивидуально изменить «tintColor», вы должны установить собственный selectedImage вместо этого.

Осторожно:

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

Что касается документации, для UITabBarItem нет свойства tintColor.

Однако сам UITabBar имеет свойство tintColor. Но это не ничего индивидуального.

Цвет оттенка

Вы можете указать собственный цвет оттенка для фона полосы с помощью поля Tint (barTintColor). Цвет фона по умолчанию - белый.

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

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

Если вы хотите дополнительно настроить вещи индивидуально, я предлагаю вам вместо этого поискать или создать индивидуальное решение.

person Community    schedule 04.02.2017
comment
Спасибо за ваш ответ! Поэтому я должен использовать изображения с alwaysOriginal. Но как насчет проблем с размером изображения? Я не понимаю, что элементы панели вкладок меняют размер всякий раз, когда я к ним прикасаюсь. Если я не использую UIEdgeInsetsMake (12, 10, 11, 11), их размер не изменяется. Но изображения совсем не помещаются в область вкладок. Вот почему я использовал этот код для их подгонки. Вы что-нибудь об этом знаете? - person Frozen Sea; 04.02.2017
comment
@FrozenSea Я обновил свой ответ проблемами изменения размера. Для начала вам следует создать изображения правильного размера, вместо того, чтобы выполнять странное изменение размера в коде с помощью наборов кромок и т. Д. Полное руководство по корректировке размеров изображений смотрите здесь: developer.apple.com/ios/human-interface-guidelines/graphics/, пожалуйста отметьте как отвеченный, если это отвечает на ваши вопросы :) GL - person ; 04.02.2017
comment
@FrozenSea Кстати. Беглый взгляд на свой код: в операторах switch отсутствуют перерывы. switch item.tag {, возможно, поэтому вы не можете изменить цвета оттенка. - person ; 04.02.2017
comment
Я попытался добавить перерыв для метода переключения. Но это не сработало. Есть ли способ изменить цвет Item.title? - person Frozen Sea; 04.02.2017
comment
@FrozenSea У вас всегда должны быть перерывы в операторах switch. Проверьте здесь настройки заголовка: stackoverflow.com/questions/28198060/ - person ; 04.02.2017
comment
@FrozenSea Я обновил свой ответ в последний раз, проверьте ответ, я думаю, что вы неправильно выполняете оператор switch и, следовательно, никогда не запускаете правильный элемент вкладки (?). Все, чем я могу помочь, GL - person ; 04.02.2017
comment
Я старался использовать только изображения для изменения цвета предметов. Но изображение было бы действительно низкого качества, если бы я сделал его таким низким, как упоминалось на сайте Apple. Поэтому я хотел бы сделать изображения с высоким разрешением, а затем изменить их размер с помощью программного кода. Есть ли способ для этого? - person Frozen Sea; 04.02.2017
comment
@FrozenSea Вам необходимо прочитать документацию и узнать, как работает масштабирование изображения для разных экранов. Это в основном 3 размера одного и того же изображения для 1x (нормальный размер), 2x (сетчатка), 3x (iphone + и т. Д.), И iOS обработает его за вас и выберет правильный масштаб. Это не то, что я могу объяснить здесь более подробно, вам действительно нужно просмотреть ссылку и убедиться, что вы понимаете, как это работает. Вы также можете поискать руководства в Google. - person ; 04.02.2017