web-dev-qa-db-ja.com

IOS 8 Tab Bar Item Background Color

私は先週、これに対する解決策を見つけようとしてきましたが、私が見つけたり考えたりする可能性のあるあらゆる解決策を試した後、運がありませんでした。私が見つけて試みたすべての解決策は、機能しないか、時代遅れです。

UITabBarItem内に配置されたUITabBarに5つのUITabBarControllerがあります。 UITabBarItemの選択時に背景色を変更したいのですが、もちろん、選択したアイテムが変更されたときに元の色に戻す必要があります。

Xcode 6.3.1でSwiftとiOS SDK 8.3を使用しています。 Objective-Cでしか答えられない場合でも、どんな答えでも役に立ちます!よろしくお願いします、本当に感謝しています!

編集:これは私がやりたいことの視覚的な例です。

異なる背景色

18
user2985289

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
  }
}
64
Gwendle

これを試すことができます。これを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

19
Mohammad Nurdin

グウェンドルに触発され、これは私がそれを解決した方法です:

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。

4
Andrej

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
            }
        }
    }
0
MichelRobico

これを試しましたか?

ストーリーボードのView ControllerでTab Barアイコン画像を選択します。

Xcodeの右パネルにある[IDとタイプ(左端)]タブ(紙のように見えます)を見てください。

グローバルな色合い設定を探します。

0
Garret