web-dev-qa-db-ja.com

UITabBarItemとしての画像のみ

UITabBarItemとしてアイコンのみを表示し、その下のテキストは表示したくないのですが、これが可能かどうか疑問に思っていました。可能であれば、どのようにしたらよいでしょうか。 TIA

21
user437038

ストーリーボードを使用する場合は、バーアイテムのサイズインスペクターからImage Insetを使用し、同時にタイトルを空に設定できます。

enter image description here

25
Gavin

タイトルを削除

インスペクターを使用した簡単な方法

  • TabbarItemを選択します
  • タイトル位置でカスタムオフセットに変更
  • 垂直を100に設定
  • 完了

enter image description here

画像を修正

画像を調整します

  • TabbarItemを選択します
  • TopBottomを定義します

enter image description here

24
Armanoide

画像を設定してタイトルにnilを渡すと、画像はUITabBarアイテムのトップレベルに表示されます。位置も設定する必要があります。

int offset = 7;
UIEdgeInsets imageInset = UIEdgeInsetsMake(offset, 0, -offset, 0);

TabBarItemのアイコン画像を設定した後、プロパティ値を設定して画像の位置を変更します。

uiViewController.tabBarItem.imageInsets = imageInset;
17
Thiago Pires

アイテムのタイトルをnilに設定するだけでは不十分なことがよくあります。これは、View Controllerのタイトルを設定すると、タブバーアイテムのタイトルも設定されるためです。

代わりに、これを行います。

tabbarItem.titlePositionAdjustment = UIOffsetMake(0.f, 50.f);
13
Bart Whiteley

この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で画像を目で確認しただけの値です。

他のデバイスやレイアウト構成では別のオフセット補正が必要になる可能性があるため、一般的なソリューションはおそらくもっと複雑にする必要があると思います。

6
algal

かなり時間が経っていることを私は知っています。しかし、私はこの問題の解決策があるかもしれません。

@ThiagoPiresの回答は、画像がタイトルをカバーするのに十分な大きさである場合にのみ役立ちます。そうでない場合は、画像の下にタイトルが表示されます。

これを実現する最も簡単な方法は、ビューコントローラのコードでtabBarItemのタイトルを「」に設定することだと思います。

ビューコントローラのタイトルを変更するたびに、タブバーアイテムのタイトルも更新されることを知っておくことが重要です。 KVOを使用してタイトルの変更を観察し、それに応じて「」をタブバーアイテムのタイトルに設定することもできます。ただし、コード内の多くの場所で変更しない場合は、ViewControllerのタイトルを変更する場所に正しく設定することができます。

Swiftの例を次に示します。

override func viewDidLoad() {

    super.viewDidLoad()

    self.title = "View controller's Title"

    self.tabBarItem.title = ""
}

それでおしまい。これがお役に立てば幸いです。

3
OscarVGG

関連するドキュメント(私のものを強調表示):

initWithTitle:image:tag:指定されたプロパティを使用して新しいアイテムを作成して返します。

- (id)initWithTitle:(NSString *)title image:(UIImage *)image tag:(NSInteger)tag

パラメーター

title:アイテムのタイトル。 nilの場合、タイトルは表示されません。

image:アイテムの画像。 nilの場合、画像は表示されません。タブバーに表示される画像は、この画像から派生したものです。この画像が大きすぎてタブバーに収まらない場合は、クリップして収まります。タブバー画像のサイズは通常30x30ポイントです。ソース画像のアルファ値は、選択されていない画像と選択された画像を作成するために使用されます。不透明な値は無視されます。

タグ:受信者のタグ。アプリケーションでバーアイテムオブジェクトを識別するために使用できる整数。

戻り値:指定されたプロパティで新しく初期化されたアイテム。

1
user529758

以下のコードで試してください:

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;
0
Pradhyuman sinh

このような

UITabBarItem * personalBarItem = [[UITabBarItem alloc] init];
[personalBarItem setFinishedSelectedImage:[UIImage imageNamed:@"personal_click"] withFinishedUnselectedImage:[UIImage imageNamed:@"personal"]];
0
Dracuuula