web-dev-qa-db-ja.com

iOS7およびiOS8でUITabBarおよびUITabBarItemを適切にカスタマイズする方法は?

私はたくさんグーグルしていますが、straightconsolidatedがどこにも見つかりません)答え。

My UITabBarControllerを次のようにカスタマイズしたい。

  1. UITabBar自体は完全に黒です
  2. アイテムタイトルのテキストの色は、非強調表示状態では白です
  3. アイテムタイトルのテキストの色は、強調表示状態では赤です
  4. タブバーで色とりどりのアイコンを使用する

1. UITabBarを黒くします

これにはUIAppearance AP​​Iを使用する必要があると思いますが、実際には次を使用してUITbarBarを黒くすることができました:[[UITabBar appearance] setBarTintColor:[UIColor blackColor]];

2.および3.アイテムタイトルの色を変更します

ただし、テキストアイテムの色は、私が望むようには見えません。グーグルした後、次の解決策は私には理にかなっていますが、非強調表示状態を白に、強調表示も白のまま...

NSDictionary *titleAttributes = @{NSForegroundColorAttributeName : [UIColor whiteColor]};
[[UITabBarItem appearance] setTitleTextAttributes:titleAttributes forState:UIControlStateNormal];

UIColor *titleHighlightedColor = [UIColor redColor]; 
NSDictionary *highlightedTitleAttributes = @{NSForegroundColorAttributeName : titleHighlightedColor};
[[UITabBarItem appearance] setTitleTextAttributes:highlightedTitleAttributes forState:UIControlStateHighlighted];

4.色とりどりのアイテム

色とりどりのアイコンについては、これまでのアプローチでは、ストーリーボードにアイコンを次のように設定するだけでした。

enter image description here

しかし、これは私が望むことをしません。アイテムがnot選択されている場合にのみ、アイコン全体が灰色で表示されます。アイテムを選択すると、アイコンが完全に消えます。

これは元のアイコンです:

enter image description here

これは、アイテムが選択されていない場合の外観です。

enter image description here

そして、ここでそれは選択された状態にあり、前述のようにアイコンは完全に消えます:

enter image description here

ですから、私の質問は、上記の要件をどれだけ正確に達成できるかということです。私は現在何が欠けていますか?ストーリーボードよりもコードですべてを行う方が良いですか?

注:私は7.0以降のiOSバージョンを対象としているため、iOS7とiOS8で動作が異なる場合は、バージョン固有の情報を含めてください。

13
nburk

私はあなたと同じ問題を抱えていました。私の知る限り、iOSのバージョンに違いはありません。
プログラムで次のように解決しました。

  1. バーの色を黒に変えると、次のように機能します(すでに言っています)(AppDelegateで):

    UITabBar.appearance().barTintColor = UIColor.blackColor()

  2. さまざまな状態のタイトルの色を設定するために、(AppDelegateで)次のコードを使用しました。

    UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName!: UIColor.redColor()], forState:.Selected)
    UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName!: UIColor.whiteColor()], forState:.Normal)
    
  3. (および4.)画像をプログラムで設定し、レンダリングモードを変更することで、さまざまなアイテムの色、色とりどりのアイコン、さまざまな状態のさまざまなアイテムの色を実現できます(imageWithRenderingMode:)からUIImageRenderingMode.AlwaysOriginal、これは次のようになります(すべてのビューコントローラーの最初のビューコントローラークラスでこれを実行します):

    var recentsItem = self.tabBarController!.tabBar.items![0] as UITabBarItem
    var recentsItemImage = UIImage(named:"recents.png")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
    var recentsItemImageSelected = UIImage(named: "recentsSelected.png")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
    recentsItem.image = recentsItemImage
    recentsItem.selectedImage = recentsItemImageSelected
    

これがお役に立てば幸いです。以下の質問がある場合は、遠慮なく私に質問してください。

19
smudis

Smudisが提供するソリューションは素晴らしく、コメントするのに十分な評判がないため、誰かに役立つ可能性がある場合に備えて、smudisのソリューションの3番目の部分をObjective-Cに投稿することにしました。

TabBarの参照を取得するには、上記のコードをAppDelegateのメソッドapplication:didFinishLaunchingWithOptionsに入力します。

UITabBarController *tbc = (UITabBarController*)self.window.rootViewController;
UITabBar *tb = tbc.tabBar;

次に、画像調整は次のように実行できます。

for (UITabBarItem *tbi in tb.items) {
    tbi.selectedImage = [tbi.selectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    tbi.image = [tbi.image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
}
5
eugen