2012-05-24 6 views
6

Ho preso un normale UITabBar e ho cambiato l'immagine di sfondo in uno personalizzato che ha un'altezza inferiore, quindi ho cambiato il height dello frame. Inizialmente ho ottenuto uno spazio vuoto sotto la barra delle schede. quindi ho modificato anche lo dello frame. Ma ora lo spazio vuoto è spostato sopra la barra delle schede e questo è il risultato:Spazio tra personalizzato UITabBar e ViewController

space above tab bar

E questo è il codice che dichiara la barra delle schede nella AppDelegate:

self.tabContoller = [[UITabBarController alloc] init]; 
//customizing the tabbar 
UIImage * tabBackgroundImage = [UIImage imageNamed:@"tabBarBg.png"]; 
self.tabContoller.tabBar.backgroundColor = [UIColor colorWithRed:245.f/255.f green:245.f/255.f blue:245.f/255.f alpha:255.f/255.f]; 
self.tabContoller.tabBar.backgroundImage = tabBackgroundImage; 
//setting the tabbar height to the correct height of the image 
CGRect tabR = self.tabContoller.tabBar.frame; 
CGFloat diff = tabR.size.height - tabBackgroundImage.size.height; 
tabR.size.height = tabBackgroundImage.size.height; 
tabR.origin.y += diff; 
self.tabContoller.tabBar.frame = tabR; 

Credo che il problema è che gli ViewController si disegnano sopra uno spazio costante che è l'altezza della normale barra delle schede. C'è un modo per cambiarlo?

+0

Provate semplicemente ad aumentare l'altezza della 'view' del viewcontroller. Se non puoi formare lo xib, fallo manualmente nel 'viewDidLoad'. – Mat

+0

Non funziona, ho persino provato a impostarlo in 'viewWillAppear' e' viewDidAppear'. non ha alcun effetto. – Nadavrbn

risposta

7

Cambia subviews del UITabBarController ad un telaio full-size, questo ha funzionato per me:

[[yourTabBarController.view.subviews objectAtIndex:0] setFrame:CGRectMake(0, 0, 320, 480)]; 
+0

Sei un vero toccasana, grazie mille! – Nadavrbn

+0

Grazie mille! –

+0

Questo non funziona in iOS7, sembra esserci qualcosa in più lasciato alle spalle. Il rettangolo nero scompare, ma ora c'è un bordo grigio dove era ... – ryan0

0

Se la modifica del frame come @JoaT menzionato non funziona, assicurarsi che la vista del controller di visualizzazione abbia il set di maschere di autorizzazione corretta.

Questo collegamento SO potrebbe essere utile.

+0

Ho provato 'UIViewAutoresizingFlexibleHeight' e' UIViewAutoresizingFlexibleBottomMargin' e non ho ottenuto risultati. Ho anche impostato queste proprietà: 'self.tabContoller.tabBar.autoresizesSubviews = YES;' e 'self.tabContoller.view.autoresizesSubviews = YES;' e non ha aiutato. Dovrei impostare altrove? – Nadavrbn

+0

Hai provato a stampare il fotogramma e le dimensioni rilegate della barra delle schede dopo che è stato visualizzato il primo controller di visualizzazione? Forse non è quello che ci aspettiamo che sia dopo averlo impostato nel delegato dell'app. – Mike

0

Ho provato cambiando l'altezza e l'origine della tabbar, per me ha funzionato correttamente. Puoi provare aumentando l'altezza del tuo viewcontroller.

7

Prova a creare una classe che si estende dal UITabBar e utilizzare questa funzione:

- (CGSize)sizeThatFits:(CGSize)size { 
    CGSize auxSize = size; 
    auxSize.height = 54; // Put here the new height you want and that's it 
    return auxSize; 
} 

Questo ridimensionerà l'UITabBar alle dimensioni che desideri. Semplice e facile.

+0

Sono sorpreso che mi ci sia voluto così tanto tempo per trovare questa risposta. Dovrebbe essere aumentato di più. Questo è davvero il modo più semplice per fare cose funky a un UITabBar. Grazie. –

+0

Sono contento che funzioni per voi. Prego. – crisisGriega

+0

Questo è letteralmente l'unico modo in cui sono riuscito a ottenere un'altezza personalizzata su un UITabBar. Grazie. –