2010-04-05 9 views

Odpowiedz

0

Właściwie jest sposób.

NSMutableArray *tabBarItems = [[[[[self.view subviews] objectAtIndex:1] subviews] mutableCopy] autorelease]; 

for (int item = 0; item < [tabBarItems count]; item++) { 
    for (int subview = 0; subview < [[[tabBarItems objectAtIndex:item] subviews] count]; subview++) { 
     for (int item = 0; item < [tabBarItems count]; item++) { 
      for (int subview = 0; subview < [[[tabBarItems objectAtIndex:item] subviews] count]; subview++) { 
       if ([[[[tabBarItems objectAtIndex:item] subviews] objectAtIndex:subview] isKindOfClass:NSClassFromString(@"UITabBarButtonLabel")]) 
        [[[[tabBarItems objectAtIndex:item] subviews] objectAtIndex:subview] setFont:[UIFont systemFontOfSize:6.0f]]; 
      } 
     } 
    } 
} 
5
TabBarIncreaseFonts(self.tabBarController); 


void TabBarIncreaseFonts(UITabBarController* customTabBarController) 
{ 

    for(UIView* controlLevelFirst in [customTabBarController.tabBar subviews]) 
    { 

     if(![controlLevelFirst isKindOfClass:NSClassFromString(@"UITabBarButton")]) 
      continue; 

     for(id controlLevelSecond in [controlLevelFirst subviews]) 
     { 
      [controlLevelSecond setBounds: CGRectMake(0, 0, 100, 48)]; 

      if(![controlLevelSecond isKindOfClass:NSClassFromString(@"UITabBarButtonLabel")]) 
       continue; 

      [controlLevelSecond setFont: [UIFont boldSystemFontOfSize:20]]; 
      [controlLevelSecond setFrame: CGRectMake(0, 0, 96, 48)]; 
      [controlLevelSecond setTextAlignment:UITextAlignmentCenter]; 
     } 
    } 
} 
59

polecam lepszy sposób:

[yourTabBarItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: 
    [UIColor whiteColor], UITextAttributeTextColor, 
    [NSValue valueWithUIOffset:UIOffsetMake(0,0)], UITextAttributeTextShadowOffset, 
    [UIFont fontWithName:@"Helvetica" size:18.0], UITextAttributeFont, nil] 
    forState:UIControlStateNormal]; 
+9

To działa tylko w iOS5.0 (lub nowszy) .. – Kjuly

+0

ładne, jego prace absolutnie w porządku dla mnie .. dzięki – Gaurav

+0

Które miejsce zrobić trzeba napisać wyżej kawałek kodu? Próbuję go używać po [self.tabBarController setViewControllers: aControllerList animated: YES]; ale to nie pomaga. – Abhinav

20
for(UIViewController *tab in self.tabBarController.viewControllers) 

{   
    [tab.tabBarItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: 
    [UIFont fontWithName:@"Helvetica" size:20.0], UITextAttributeFont, nil] 
    forState:UIControlStateNormal]; 
} 
+0

AKTUALIZACJA: Zobacz odpowiedź voghDev dla wersji iOS 7.0+, która omija przestarzałe UITextAttributeFont. – ToolmakerSteve

1

[pozostawiając to tutaj dla własnego odniesienia, tylko riff off innych odpowiedzi roboczych. Dla mem jest to poprawka dla iOS 7, który jest poza pytaniem o trochę ...]

@implementation UITabBarController (Util) 

- (void) fixForIos7 { 
    if (!IS_IOS7) 
     return; 
    UIFont *tabBarFont = [UIFont systemFontOfSize:12]; 
    NSDictionary *titleTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys: 
      tabBarFont, UITextAttributeFont, nil]; 
    for(UIViewController *tab in self.viewControllers) { 
     [tab.tabBarItem setTitleTextAttributes:titleTextAttributes forState:UIControlStateNormal]; 
    } 
} 
@end 

brakującym metoda jest

#define IS_IOS7 (UIDevice.currentDevice.systemVersion.floatValue > 6.9) 
7

Prosty w iOS 5.0 lub nowszym:

[[UITabBarItem appearance] setTitleTextAttributes:@{UITextAttributeFont:[UIFont boldSystemFontOfSize:15]} forState:UIControlStateNormal]; 
+0

dobre rozwiązanie, ale użyj 'NSFontAttributeName' zamiast' UITextAttributeFont' – Laszlo

9

[Aktualizacja] iOS 7.0+ wersja miłą odpowiedź @ cancer86 za:

[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: 
                [UIColor whiteColor], NSForegroundColorAttributeName, 
                [UIFont fontWithName:@"Helvetica" size:tabFontSize], 
                NSFontAttributeName, 
                nil] forState:UIControlStateNormal]; 

[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: 
                [UIColor redColor], NSForegroundColorAttributeName, 
                [UIFont fontWithName:@"Helvetica" size:tabFontSize], NSFontAttributeName, 
                nil] forState:UIControlStateSelected]; 

Główną zmianą jest to, że UITextAttributeTextColor i UITextAttributeFont są zarówno przestarzała

Aby zastosować go do wszystkich kartach (dzięki @ToolmakerSteve za wskazanie)

for(UIViewController *tab in self.tabBarController.viewControllers) 
{   
    [tab.tabBarItem setTitleTextAttributes: ...]; 
} 
+0

.. aby zastosować do wszystkich kart, z odpowiedzi spatil 'dla (karta UIViewController * w self.tabBarController.viewControllers) [tab.tabBarItem setTitleTextAttributes: ...' – ToolmakerSteve

+0

Odpowiedź ok zaktualizowana – voghDev

+0

Czy możemy mieć szybką wersję 3 do tego –

12

w Swift 2.0

override func viewDidLoad() { 
    super.viewDidLoad() 

    let appearance = UITabBarItem.appearance() 
    let attributes: [String: AnyObject] = [NSFontAttributeName:UIFont(name: "American Typewriter", size: 12)!, NSForegroundColorAttributeName: UIColor.orangeColor()] 
    appearance.setTitleTextAttributes(attributes, forState: .Normal) 

} 

W Swift 3.0

override func viewDidLoad() { 
    super.viewDidLoad() 

    let appearance = UITabBarItem.appearance() 
    let attributes: [String: AnyObject] = [NSFontAttributeName:UIFont(name: "American Typewriter", size: 12)!, NSForegroundColorAttributeName: UIColor.orange] 
    appearance.setTitleTextAttributes(attributes, for: .normal) 
}