通常、UITabBar
の各タブには、小さな画像とタブに名前を付けるタイトルがあります。画像はタブの上部に配置/中央に配置され、下のタイトルに対応します。私の質問は、画像だけでタブバーを持ちたい場合で、タイトルを持たないタブバー内の画像を下に移動する方法はありますか?
私は現在使用しています(以下を参照):
[tabBarItem setFinishedSelectedImage:tabSelected withFinishedUnselectedImage:tabUnselected];
しかし、タイトルのない大きな画像を使用することを好むでしょう。現時点では、画像を約70pixels @ 2xより大きくすると、UITabBar
の上部から縁取りが始まり、下部に多くの未使用のスペースが残ります。
tabBarItem
のimageInsets
を調整して(アイコン画像を移動するため)、コントローラーのタイトルをnilに設定してください(タイトルは表示されません)。このようなものを-init
または -viewDidLoad
View Controllerのメソッド:
Objective-C
self.tabBarItem.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0);
self.title = nil;
スイフト
self.tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
self.title = nil
UITabBarItem
は、UIBarItem
のサブクラスであり、UIEdgeInsets imageInsets
プロパティ。見栄えがよくなるまでインセットを少し再生します(タブバーアイコンの画像によって異なります)
UITabBarController
のサブクラスを作成し、そのviewDidLoad
で:
- (void)viewDidLoad
{
[super viewDidLoad];
[self.viewControllers enumerateObjectsUsingBlock:^(UIViewController *vc, NSUInteger idx, BOOL *stop) {
vc.tabBarItem.title = nil;
vc.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0);
}];
}
スウィフト3:
for vc in self.viewControllers! {
vc.tabBarItem.title = nil
vc.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0)
}
これは私のために働いた
Swift 4
let array = tabBarController?.customizableViewControllers
for controller in array! {
controller.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0)
}
Xamarinを使用している場合、これは機能します。
screen.TabBarItem.ImageInsets = new UIEdgeInsets(5, 0, -5, 0);
screen.TabBarItem.Title = "";
IOS 11の場合、ImageInsetsの設定とは別にTraitCollectionメソッドをオーバーライドする必要があります。サブクラス化されたUITabBarControllerクラスにメソッドを追加してください
public override UITraitCollection TraitCollection {
get {
return UITraitCollection.FromHorizontalSizeClass(horizontalSizeClass: UIUserInterfaceSizeClass.Compact);
}
}
Swift 3.
画像のインセットを設定し、デザインに応じて上下左右を設定できます。
self.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: 0, right: 0)
Swift 4.2では、UIEdgeInsetsMake
が廃止され、代わりにUIEdgeInsets
を使用する必要があります。
let array = tabBarController?.customizableViewControllers
for controller in array! {
controller.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: -5, right: 0)
}