it-swarm.com.de

UITabBarItem-Bild nach unten verschieben?

Normalerweise haben Sie auf jeder Registerkarte eines UITabBar ein kleines Bild und einen Titel, der die Registerkarte benennt. Das Bild wird zum oberen Rand der Registerkarte positioniert/zentriert, um den Titel darunter aufzunehmen. Meine Frage ist: Wenn Sie eine TabBar mit nur einem Bild und keinen Titel haben möchten, gibt es eine Möglichkeit, das Bild nach unten zu verschieben, damit es besser innerhalb der Registerkarte zentriert wird?

Ich verwende derzeit (siehe unten):

[tabBarItem setFinishedSelectedImage:tabSelected withFinishedUnselectedImage:tabUnselected];

ich würde es jedoch vorziehen, ein größeres Bild ohne Titel zu verwenden. Im Moment, wenn ich das Bild größer als etwa 70 Pixel @ 2x mache, fängt es an, sich vom oberen Rand des UITabBar abzusetzen, während am unteren Rand viel ungenutzter Speicherplatz verbleibt.

86
fuzzygoat

Passen Sie die Variable tabBarItem (zum Verschieben des Symbolbilds) an imageInsets an und setzen Sie den Controller-Titel auf null (so dass kein Titel angezeigt wird). Setzen Sie etwas in die -init- oder -viewDidLoad-Methode im View-Controller:

Ziel c

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

Swift

self.tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
self.title = nil

UITabBarItem ist eine Unterklasse von UIBarItem mit der UIEdgeInsets imageInsets-Eigenschaft. Spielen Sie ein wenig mit den Insets, bis es gut aussieht (abhängig von den Symbolen der Tabsymbole)

159
Lukas Kukacka

Sie können es auch über das Storyboard tun. Wählen Sie Ihr Tabbaritem aus, gehen Sie zum Größeninspektor und weisen Sie die entsprechenden Einschübe zu.

 enter image description here

* Demonstriert auf Xcode, Version 7.3.1 (7D1014)

127

Erstellen Sie eine Unterklasse von UITabBarController und in ihrer 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);
    }];
}

Swift 3:

for vc in self.viewControllers! {
    vc.tabBarItem.title = nil
    vc.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0)
}
46
Brian

Wenn Sie Xamarin verwenden, funktioniert das:

screen.TabBarItem.ImageInsets = new UIEdgeInsets(5, 0, -5, 0);
screen.TabBarItem.Title = "";
9
Jelle

Das hat bei mir funktioniert

Swift 4

let array = tabBarController?.customizableViewControllers
for controller in array! {
    controller.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0)
}
8
Alfi

Bei iOS 11 müssen Sie die Methode TraitCollection außer der Einstellung von ImageInsets außer Kraft setzen. Fügen Sie die Methode in Ihre Unterklasse UITabBarController-Klasse ein

public override UITraitCollection TraitCollection {
 get {
  return UITraitCollection.FromHorizontalSizeClass(horizontalSizeClass: UIUserInterfaceSizeClass.Compact);
 }
}
2
Prashant

Swift 3.0

Sie können Bildeinschübe festlegen, oben, links, unten und rechts je nach Design festlegen.

self.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: 0, right: 0)
1
krish

In Swift 4.2 ist UIEdgeInsetsMake depricated, stattdessen sollten wir UIEdgeInsets verwenden,

let array = tabBarController?.customizableViewControllers
    for controller in array! {
        controller.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: -5, right: 0)
    }
0
Bappaditya