私は先週、これに対する解決策を見つけようとしてきましたが、私が見つけたり考えたりする可能性のあるあらゆる解決策を試した後、運がありませんでした。私が見つけて試みたすべての解決策は、機能しないか、時代遅れです。
UITabBarItem
内に配置されたUITabBar
に5つのUITabBarController
があります。 UITabBarItem
の選択時に背景色を変更したいのですが、もちろん、選択したアイテムが変更されたときに元の色に戻す必要があります。
Xcode 6.3.1でSwiftとiOS SDK 8.3を使用しています。 Objective-Cでしか答えられない場合でも、どんな答えでも役に立ちます!よろしくお願いします、本当に感謝しています!
編集:これは私がやりたいことの視覚的な例です。
TabBarControllerで、デフォルトのUITabBar tintColor、barTintColor、selectionIndicatorImage(ここでは少し不正です)、および画像のrenderingModeを設定できます。以下のコメントを参照してください。
class MyTabBarController: UITabBarController, UINavigationControllerDelegate {
...
override func viewDidLoad() {
...
// Sets the default color of the icon of the selected UITabBarItem and Title
UITabBar.appearance().tintColor = UIColor.redColor()
// Sets the default color of the background of the UITabBar
UITabBar.appearance().barTintColor = UIColor.blackColor()
// Sets the background color of the selected UITabBarItem (using and plain colored UIImage with the width = 1/5 of the tabBar (if you have 5 items) and the height of the tabBar)
UITabBar.appearance().selectionIndicatorImage = UIImage().makeImageWithColorAndSize(UIColor.blueColor(), size: CGSizeMake(tabBar.frame.width/5, tabBar.frame.height))
// Uses the original colors for your images, so they aren't not rendered as grey automatically.
for item in self.tabBar.items as! [UITabBarItem] {
if let image = item.image {
item.image = image.imageWithRenderingMode(.AlwaysOriginal)
}
}
}
...
}
そして、UIImageクラスを拡張して、必要なサイズの無地の色の画像を作成します。
extension UIImage {
func makeImageWithColorAndSize(color: UIColor, size: CGSize) -> UIImage {
UIGraphicsBeginImageContextWithOptions(size, false, 0)
color.setFill()
UIRectFill(CGRectMake(0, 0, size.width, size.height))
var image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
これを試すことができます。これをAppDelegate.Swift
に追加します。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
UITabBar.appearance().translucent = false
UITabBar.appearance().barTintColor = UIColor(rgba: "#12296f")
UITabBar.appearance().tintColor = UIColor.whiteColor()
return true
}
このライブラリを含めることを忘れないでください。 https://github.com/yeahdongcn/UIColor-Hex-Swift
グウェンドルに触発され、これは私がそれを解決した方法です:
override func viewWillAppear(animated: Bool) {
guard let tabBar = tabBarController?.tabBar else { return }
tabBar.tintColor = UIColor.whiteColor()
tabBar.selectionIndicatorImage = UIImage().makeImageWithColorAndSize(UIColor.redColor(), size: CGSizeMake(tabBar.frame.width/5, tabBar.frame.height))
super.viewWillAppear(animated)
}
また、拡張機能を使用しました:
extension UIImage {
func makeImageWithColorAndSize(color: UIColor, size: CGSize) -> UIImage {
UIGraphicsBeginImageContext(size)
color.setFill()
UIRectFill(CGRectMake(0, 0, size.width, size.height))
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
selectionIndicationImage
を設定した後、他のすべてのタブに設定されたままになることに注意してください。残りのタブの他のすべてのView Controllerでnilに設定して、削除する方法の例を次に示します。
override func viewWillAppear(animated: Bool) {
tabBarController?.tabBar.tintColor = UIColor.redColor()
tabBarController?.tabBar.selectionIndicatorImage = nil
super.viewWillAppear(animated)
}
Swift 2。
self.tabBarController
と必要な各色を渡す各コントローラーからこの関数を呼び出すことができます。
機能:
static func customTabBar(controller: UIViewController?, backgroundColor: String, unselectedColor: String, selectedColor: String) {
if let tabBarController = controller as? UITabBarController {
tabBarController.tabBar.barTintColor = UIColor(hex: backgroundColor)
tabBarController.tabBar.tintColor = UIColor(hex: selectedColor)
tabBarController.tabBar.isTranslucent = false
tabBarController.tabBar.selectedItem?.setTitleTextAttributes([NSAttributedString.Key.foregroundColor:UIColor(hex: selectedColor)], for: UIControl.State.selected)
if #available(iOS 10.0, *) {
tabBarController.tabBar.unselectedItemTintColor = UIColor(hex: unselectedColor)
} else {
// Fallback on earlier versions
}
}
}
これを試しましたか?
ストーリーボードのView ControllerでTab Barアイコン画像を選択します。
Xcodeの右パネルにある[IDとタイプ(左端)]タブ(紙のように見えます)を見てください。
グローバルな色合い設定を探します。