UITabBarItemとしてアイコンのみを表示し、その下のテキストは表示したくないのですが、これが可能かどうか疑問に思っていました。可能であれば、どのようにしたらよいでしょうか。 TIA
ストーリーボードを使用する場合は、バーアイテムのサイズインスペクターからImage Inset
を使用し、同時にタイトルを空に設定できます。
画像を設定してタイトルにnilを渡すと、画像はUITabBarアイテムのトップレベルに表示されます。位置も設定する必要があります。
int offset = 7;
UIEdgeInsets imageInset = UIEdgeInsetsMake(offset, 0, -offset, 0);
TabBarItemのアイコン画像を設定した後、プロパティ値を設定して画像の位置を変更します。
uiViewController.tabBarItem.imageInsets = imageInset;
アイテムのタイトルをnilに設定するだけでは不十分なことがよくあります。これは、View Controllerのタイトルを設定すると、タブバーアイテムのタイトルも設定されるためです。
代わりに、これを行います。
tabbarItem.titlePositionAdjustment = UIOffsetMake(0.f, 50.f);
このSwift拡張機能を使用して、新しいメソッドtabBarItemShowingOnlyImage()
を定義できます。これにより、画像のみを表示するように変更されたUITabBarItem
が返されます。
// helper for creating an image-only UITabBarItem
extension UITabBarItem {
func tabBarItemShowingOnlyImage() -> UITabBarItem {
// offset to center
self.imageInsets = UIEdgeInsets(top:6,left:0,bottom:-6,right:0)
// displace to hide
self.setTitlePositionAdjustment(UIOffset(horizontal:0,vertical:30000))
return self
}
}
この拡張機能は、他のコメントで提供されているアドバイスに基づいています。
nil
に設定するのではなく、タイトルを移動して非表示にします。これは、ビューコントローラ自体などの他のオブジェクトが、タブバーアイテムの初期化後にタイトルをある値に設定する場合があるためです。 imageInsets
を使用して画像を中央に配置し、6ptオフセットします。これは、iOS8.3を実行しているiPhone6で画像を目で確認しただけの値です。
他のデバイスやレイアウト構成では別のオフセット補正が必要になる可能性があるため、一般的なソリューションはおそらくもっと複雑にする必要があると思います。
かなり時間が経っていることを私は知っています。しかし、私はこの問題の解決策があるかもしれません。
@ThiagoPiresの回答は、画像がタイトルをカバーするのに十分な大きさである場合にのみ役立ちます。そうでない場合は、画像の下にタイトルが表示されます。
これを実現する最も簡単な方法は、ビューコントローラのコードでtabBarItemのタイトルを「」に設定することだと思います。
ビューコントローラのタイトルを変更するたびに、タブバーアイテムのタイトルも更新されることを知っておくことが重要です。 KVOを使用してタイトルの変更を観察し、それに応じて「」をタブバーアイテムのタイトルに設定することもできます。ただし、コード内の多くの場所で変更しない場合は、ViewControllerのタイトルを変更する場所に正しく設定することができます。
Swiftの例を次に示します。
override func viewDidLoad() {
super.viewDidLoad()
self.title = "View controller's Title"
self.tabBarItem.title = ""
}
それでおしまい。これがお役に立てば幸いです。
関連するドキュメント(私のものを強調表示):
initWithTitle:image:tag:指定されたプロパティを使用して新しいアイテムを作成して返します。
- (id)initWithTitle:(NSString *)title image:(UIImage *)image tag:(NSInteger)tag
パラメーター
title:アイテムのタイトル。 nilの場合、タイトルは表示されません。
image:アイテムの画像。 nilの場合、画像は表示されません。タブバーに表示される画像は、この画像から派生したものです。この画像が大きすぎてタブバーに収まらない場合は、クリップして収まります。タブバー画像のサイズは通常30x30ポイントです。ソース画像のアルファ値は、選択されていない画像と選択された画像を作成するために使用されます。不透明な値は無視されます。
タグ:受信者のタグ。アプリケーションでバーアイテムオブジェクトを識別するために使用できる整数。
戻り値:指定されたプロパティで新しく初期化されたアイテム。
以下のコードで試してください:
UIViewController *viewController1=[[RootViewController alloc]initWithNibName:@"RootViewController" bundle:nil];
UIViewController *viewController2=[[SecondViewCtr alloc]initWithNibName:@"SecondViewCtr" bundle:nil];
UIViewController *viewController3=[[ThirdViewCtr alloc]initWithNibName:@"ThirdViewCtr" bundle:nil];
UIViewController *viewController4=[[FourthVIewCtr alloc]initWithNibName:@"FourthVIewCtr" bundle:nil];
UIViewController *viewController5=[[FIfthViewCtr alloc]initWithNibName:@"FIfthViewCtr" bundle:nil];
UINavigationController *nav1 = [[UINavigationController alloc] initWithRootViewController:viewController1];
UINavigationController *nav2 = [[UINavigationController alloc] initWithRootViewController:viewController2];
UINavigationController *nav3 = [[UINavigationController alloc] initWithRootViewController:viewController3];
UINavigationController *nav4 = [[UINavigationController alloc] initWithRootViewController:viewController4];
UINavigationController *nav5 = [[UINavigationController alloc] initWithRootViewController:viewController5];
peekArray = [[NSMutableArray alloc] init];
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:nav1, nav2,nav3,nav4,nav5, nil];
UITabBar *tabBar = _tabBarController.tabBar;
UITabBarItem *tabBarItem1 = [tabBar.items objectAtIndex:0];
UITabBarItem *tabBarItem2 = [tabBar.items objectAtIndex:1];
UITabBarItem *tabBarItem3 = [tabBar.items objectAtIndex:2];
UITabBarItem *tabBarItem4 = [tabBar.items objectAtIndex:3];
UITabBarItem *tabBarItem5 = [tabBar.items objectAtIndex:4];
[tabBarItem1 setFinishedSelectedImage:[UIImage imageNamed:@"home123.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"home_112.png"]];
[tabBarItem2 setFinishedSelectedImage:[UIImage imageNamed:@"gift123.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"gift_112.png"]];
[tabBarItem3 setFinishedSelectedImage:[UIImage imageNamed:@"cam12.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"cam_112.png"]];
[tabBarItem4 setFinishedSelectedImage:[UIImage imageNamed:@"message12.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"message_112.png"]];
[tabBarItem5 setFinishedSelectedImage:[UIImage imageNamed:@"people12.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"people_112.png"]];
[self.tabBarController setSelectedIndex:0];
self.window.rootViewController = self.tabBarController;
このような
UITabBarItem * personalBarItem = [[UITabBarItem alloc] init];
[personalBarItem setFinishedSelectedImage:[UIImage imageNamed:@"personal_click"] withFinishedUnselectedImage:[UIImage imageNamed:@"personal"]];