20

カスタム タブ バーで奇妙な動作が発生しています。画像が正しく配置されていないようです。これがスクリーンショットです(問題を強調するために、独自のタブバーの背景を削除しました):

スクリーンショット

各状態の画像を設定するために使用しているコードは次のとおりです。

self.tabBarController = [[[UITabBarController alloc] init] autorelease];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:homeNavController, whatsOnNavController, mapNavController, infoNavController, nil];
self.tabBarController.delegate = self;

// For iOS 5 only - custom tabs
if ([self.tabBarController.tabBar respondsToSelector:@selector(selectedImageTintColor)]) 
{

    // Set the background images
    //[[UITabBar appearance] setBackgroundImage: [UIImage imageNamed:@"nav_bg.png"]];
    [[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"nav_over.png"]];

    [homeNavController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"nav_home_over"] withFinishedUnselectedImage:[UIImage imageNamed:@"nav_home"]];
    [whatsOnNavController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"nav_whats_on_over"] withFinishedUnselectedImage:[UIImage imageNamed:@"nav_whats_on"]];
    [mapNavController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"nav_map_over"] withFinishedUnselectedImage:[UIImage imageNamed:@"nav_map"]];
    [infoNavController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"nav_info_over"] withFinishedUnselectedImage:[UIImage imageNamed:@"nav_info"]];

}

私の置換タブ画像はすべて正しいサイズです (非 Retina バージョンの場合、高さ 49 ピクセル、幅 80 ピクセル)。

この奇妙な動作の原因は何ですか?

- - アップデート - -

背景が配置された更新されたスクリーンショットを次に示します。

スクリーンショット 2

4

6 に答える 6

66

UIBarItem にはプロパティがあります (UIBarButton アイテムはこのクラスから継承されます) imageInsets

フルハイト画像 (49px) を使用するには、次の画像インセットを設定する必要がfinishedSelectedImageありfinishedUnselectedImageます。

tabBarItem.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0);

于 2012-08-28T08:14:24.060 に答える
25

これはストーリーボードで修正できます。ストーリーボード サイズ インスペクターの画像インセット調整 タブ バー アイテムのストーリーボード サイズ インスペクター

調整するタブ バー アイテムを選択し、サイズ インスペクターを開き、上部と下部の画像インセットを調整します。それらを同じ量に調整する必要があります。そうしないと、画像が押しつぶされたり引き伸ばされたりします(つまり、上に+5、下に-5)。

于 2015-02-26T21:41:04.040 に答える
3

これは少しハックに思えるかもしれませんが、それがあなたが望むものを達成できる唯一の方法だと思います: 透明な 11 ピクセルの「上部パディング」(網膜の場合は 22 ピクセル) を持つタブバー完成画像を使用するだけです。画像の高さは 60 ピクセル (120 ピクセル) にする必要があります。

私のアプリはこの手法を使用して App Store に掲載されたので、安全に使用できるはずです。

それが役に立てば幸い!

于 2012-06-13T22:59:52.077 に答える
2

この API は、文書化が不十分です。

あなたfinishedSelectedImageは〜30x30ピクセルのアイコンでなければなりません。これは、タブのアイコン部分です。高すぎるを作成するfinishedSelectedImageと、システムはそれを画面の一番下に配置しません。

概念的にはbackgroundImage、tabBar の全幅、高さ 49 ピクセルから始めて、選択したタブの背景画像として機能する単一タブ幅、高selectionIndicatorImageさ 49 ピクセルを追加してから、各タブのアイコンの 2 つのバージョンを追加します ~30x30 ピクセル、finishedUnselectedImagefinishedSelectedImage

于 2012-08-07T13:31:19.230 に答える
2

tabitem 内には常にテキストが必要であることがわかりました。スペースは空白のテキストによって作成されました。

于 2012-05-14T08:59:27.030 に答える
-1

フレームが定義されている代わりにサブビューとして画像を追加すると、役立ちます。 これをチェックして

少し小さい画像を使用してみてください。タブバーはそれらをわずかに再配置します

于 2012-05-10T13:54:06.730 に答える