1

私のアプリでは、次のようUITabBarControllerにカスタムの選択/選択されていない画像を提供するがありAppDelegateます:

UIImage *selectedImage = [UIImage imageNamed:@"home-tab-selected"];
UIImage *unselectedImage = [UIImage imageNamed:@"home-tab"];
UITabBar *tabBar = tabController.tabBar;
UITabBarItem *item1 = [tabBar.items objectAtIndex:0];
[item1 setFinishedSelectedImage:selectedImage withFinishedUnselectedImage:unselectedImage];

私が持っている画像は 100x100 で、通常のタブ バー アイテムよりもはるかに大きくなっています。すべてがうまく機能し、私の画像はうまく配置され、見栄えがします。

私が抱えている問題は、下敷きのフレームUITabBarButtonが 76x48 のままで、タブのごく一部しか「タッチ可能」にならないことです。(下の画像はフレームの周りに枠がついています)

タブ画像より小さいフレーム

これを修正するために、私の subcalssedで each を調べUITabBarController viewDidLoadUITabBarButton次のようにフレームを設定します。

for (UIView* subView in self.tabBar.subviews)
{
    if ([subView isKindOfClass:NSClassFromString(@"UITabBarButton")])
    {

        [subView setFrame:CGRectMake(subView.frame.origin.x, subView.frame.origin.y, 100, 100)];


    }
}

それを行った後、フレームをログに記録すると変更されます-しかし、フレームはタブバーで変更されません-私はまだ小さい赤いボックスだけを見て、触れることができます。

これは、Apple がこれらのフレームの変更を許可していないためですか、それともここで何か間違ったことをしているのですか?

どんな助けでも感謝します!ありがとう!

編集:

結局、タブの画像を小さくすることになりました。70px の高さでもほとんどのタッチを拾えることがわかりました。

4

2 に答える 2

4

のビューのレイアウトは、UITabBarControllerロード後に変更される可能性があります。追加UITabBarItemの が追加される可能性があり、ユーザーが横向きに切り替える可能性があります。

iOS 6 より前は、複雑なレイアウトを構成する方法がありませんでした。は非常に古いクラスであるため、メソッドUITabBar内で作業を行っている可能性が最も高いです。layoutSubviews

上記のメソッドをサブクラス化UITabBarしてオーバーライドすることもできますが、そこまで行く場合は、独自のタブ バーを作成することを検討することをお勧めしUIViewますUIButton

于 2012-12-18T15:31:35.603 に答える