2013-04-29 9 views
71

Normalerweise haben Sie auf jeder Registerkarte einer UITabBar ein kleines Bild und einen Titel, der die Registerkarte benennt. Das Bild wird zum oberen Rand der Registerkarte positioniert/zentriert, um den darunter liegenden Titel 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 in der Registerkarte zentriert?UITabBarItem Image verschieben?

ich verwende (siehe unten) zur Zeit:

[tabBarItem setFinishedSelectedImage:tabSelected withFinishedUnselectedImage:tabUnselected]; 

aber würde es vorziehen, um größeres Bild ohne Titel zu verwenden, in dem Moment, wenn ich das Bild größer als etwa 70pixels machen @ 2x es beginnt Einfassung von der Oberseite des UITabBar, während viel ungenutzter Platz an der Unterseite verlassen.

Antwort

141

Versuchen Sie, tabBarItem 's imageInsets (zum Verschieben des Symbolbildes) anzupassen und den Controller - Titel auf Null zu setzen (so wird kein Titel angezeigt). Setzen Sie so etwas zu -init oder -viewDidLoad Verfahren in View-Controller:

Objective-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 die UIEdgeInsets imageInsets Eigenschaft hat. Spielen Sie ein wenig mit den Einsätzen, bis es gut aussieht (je nach Tabbar Symbolbilder)

+0

Dies löste mein Problem. Ich habe eine Unterklasse von UITabBarController erstellt und iterierte self.tabBar.items. – Fogh

+3

@Lukas: aber das schrumpft Bilder. – Sourabh

+1

@Sourabh Schrumpft sie nicht für mich – TigerCoding

41

eine Unterklasse von UITabBarController Make und in seiner 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) 
} 
+0

das funktionierte für mich. nur dass für schnelle die Methode enumerateObjectsUsingBlock ist nicht mehr verfügbar –

+0

nicht Unterklasse, setzen Sie dies stattdessen in Ihre AppDelegate – Laszlo

+0

setzen dieses Schnipsel in 'AppDelegate' funktioniert auch, aber es ist nicht offensichtlich besser als Unterklassen es. Sie können jedoch Ihre eigenen Vorlieben haben :) – Brian

9

Wenn Sie Xamarin verwenden, funktioniert das:

104

Sie können es über Storybo tun ard auch. Wählen Sie Ihr Tabbaritem, gehen Sie zum Größeninspektor und weisen Sie die entsprechenden Einfügungen zu.

enter image description here

* auf Xcode Nachgewiesene, Version 7.3.1 (7D1014)

+0

Super !!!!!!!!!! – Mirko

+0

schön und sauber! – ken

0

SWIFT 3.0

Sie Bild lnsets festlegen können, setzen oben, links, unten und rechts nach Design.

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

Für iOS 11 Sie müssen von der Einstellung ImageInsets TraitCollection Methode auseinander außer Kraft zu setzen. Bitte fügen Sie die Methode in der Unterklasse UITabBarController Klasse

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

Guter Tipp, der mir geholfen hat, ein Problem im Zusammenhang mit der Bildposition für Tab-Leiste auf iPad und iOS 11 zu lösen. Aber es ist zu hart, um die Trait-Sammlung auf der View-Controller-Ebene zu überschreiben, ist es besser, die UITabBar-Klasse Unterklasse und überschreiben die TraitCollection Eigentum dort. Wenn Sie auch eine Merkmalssammlung mit nur der horizontalen Klasse zurückgeben, werden andere Merkmalssammlungseigenschaften gelöscht. 'return UITraitCollection (traitesFrom: [super.traitCollection, UITraitCollection (horizontalSizeClass: .compact)])' hat den Trick für mich getan. –

Verwandte Themen