私はたくさんグーグルしていますが、straightとconsolidatedがどこにも見つかりません)答え。
My UITabBarController
を次のようにカスタマイズしたい。
UITabBar
自体は完全に黒ですUITabBar
を黒くしますこれにはUIAppearance
APIを使用する必要があると思いますが、実際には次を使用してUITbarBar
を黒くすることができました:[[UITabBar appearance] setBarTintColor:[UIColor blackColor]];
。
ただし、テキストアイテムの色は、私が望むようには見えません。グーグルした後、次の解決策は私には理にかなっていますが、非強調表示状態を白に、強調表示も白のまま...
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];
色とりどりのアイコンについては、これまでのアプローチでは、ストーリーボードにアイコンを次のように設定するだけでした。
しかし、これは私が望むことをしません。アイテムがnot選択されている場合にのみ、アイコン全体が灰色で表示されます。アイテムを選択すると、アイコンが完全に消えます。
これは元のアイコンです:
これは、アイテムが選択されていない場合の外観です。
そして、ここでそれは選択された状態にあり、前述のようにアイコンは完全に消えます:
ですから、私の質問は、上記の要件をどれだけ正確に達成できるかということです。私は現在何が欠けていますか?ストーリーボードよりもコードですべてを行う方が良いですか?
注:私は7.0以降のiOSバージョンを対象としているため、iOS7とiOS8で動作が異なる場合は、バージョン固有の情報を含めてください。
私はあなたと同じ問題を抱えていました。私の知る限り、iOSのバージョンに違いはありません。
プログラムで次のように解決しました。
バーの色を黒に変えると、次のように機能します(すでに言っています)(AppDelegateで):
UITabBar.appearance().barTintColor = UIColor.blackColor()
さまざまな状態のタイトルの色を設定するために、(AppDelegateで)次のコードを使用しました。
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName!: UIColor.redColor()], forState:.Selected)
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName!: UIColor.whiteColor()], forState:.Normal)
(および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
これがお役に立てば幸いです。以下の質問がある場合は、遠慮なく私に質問してください。
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];
}