web-dev-qa-db-ja.com

タブバーの選択されていないアイコンの色をすばやく変更するにはどうすればよいですか?

タブバーの選択されていないアイコンとテキストの色を変更するにはどうすればよいですか?この答えを見つけました( タブバーの非アクティブなアイコン/テキストの色を変更するには? )が、Swiftに実装できません。

12
Walter West

iOS 10

class TabBarVC: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

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

以下は、すべてのUITabBarItemのデフォルトを設定します。これを、AppDelegateに追加できます。テキストの色が変わります。

UITabBarItem.appearance().setTitleTextAttributes({NSForegroundColorAttributeName: UIColor.blackColor()}, forState:.Selected)
UITabBarItem.appearance().setTitleTextAttributes({NSForegroundColorAttributeName: UIColor.whiteColor()}, forState:.Normal)

アイコンの色を変更するには、画像がすでに適切な色になっている特定の状態の画像を設定できます。

self.tabBarItem.selectedImage = [[UIImage imageNamed:@"selectedImage"]
imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

self.tabBarItem.image = [[UIImage imageNamed:@"notSelectedImage"] 
imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

または、この方法で行うことができます:

UIImageクラスに拡張子を追加します( この回答 から):

extension UIImage {
func imageWithColor(color1: UIColor) -> UIImage {
    UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)

    let context = UIGraphicsGetCurrentContext() as CGContextRef
    CGContextTranslateCTM(context, 0, self.size.height)
    CGContextScaleCTM(context, 1.0, -1.0);
    CGContextSetBlendMode(context, kCGBlendModeNormal)

    let rect = CGRectMake(0, 0, self.size.width, self.size.height) as CGRect
    CGContextClipToMask(context, rect, self.CGImage)
    color1.setFill()
    CGContextFillRect(context, rect)

    let newImage = UIGraphicsGetImageFromCurrentImageContext() as UIImage
    UIGraphicsEndImageContext()

    return newImage
}
}

そしてあなたのviewDidLoad

for item in self.tabBar.items as [UITabBarItem] {
    if let image = item.image {
        item.image = image.imageWithColor(UIColor.blackColor()).imageWithRenderingMode(.AlwaysOriginal)
    }
}
13
BoilingLime

IOS 11では、ストーリーボードのUIToolBarでプロパティを直接設定できます。

unselectedItemTintColor |色| 【希望の色】

Xcodeプリント

Screen Shot

7
Phelippe Amorim

Swift 4 +

UITabBar.appearance().unselectedItemTintColor = UIColor.green

このコードをappDelegate's didFinishLaunchingWithOptionsメソッドで使用します。

4
Abhishek Jain

@BoilingLimeの答えを補完するものとして、ここでは2番目の選択肢のUIImage拡張機能をSwift 3:

extension UIImage {
func imageWithColor(color1: UIColor) -> UIImage {
    UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)

    let context = UIGraphicsGetCurrentContext()! as CGContext
    context.translateBy(x: 0, y: self.size.height)
    context.scaleBy(x: 1.0, y: -1.0);
    context.setBlendMode(CGBlendMode.normal)

    let rect = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height)
    context.clip(to: rect, mask: self.cgImage!)
    color1.setFill()
    context.fill(rect)

    let newImage = UIGraphicsGetImageFromCurrentImageContext()! as UIImage
    UIGraphicsEndImageContext()

    return newImage
}
}
1
Bruno Barbosa

IOS 11 Swift 4ソリューションを探している場合は、appDelegateで次のようにします。これにより、選択されていないすべてのタブバーアイテムが黒に変更されます。

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    UITabBar.appearance().unselectedItemTintColor = UIColor(displayP3Red: 0, green: 0, blue: 0, alpha: 1)

    return true
}
0
thalacker