2012-05-24 11 views
6

Tomé un UITabBar regular y cambié su imagen de fondo a una personalizada que tiene una altura más baja, así que cambié el height del frame. Al principio, lo que obtuve es un espacio en blanco debajo de la barra de pestañas. así que cambié el origin del frame también. Pero ahora el espacio en blanco se ha movido hacia arriba por encima de la barra de pestañas y este es el resultado:Espacio entre UITabBar y ViewController personalizados

space above tab bar

Y este es el código que declara la barra de pestañas en el 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; 

supongo que el problema es que los ViewController s se dibujan sobre un espacio constante que es el alto de la barra de pestañas normal. ¿Hay alguna forma de cambiarlo?

+0

Pruebe simplemente aumentando la 'altura' de la 'vista' del controlador de vista. Si no puede formar el xib, hágalo manualmente en 'viewDidLoad'. – Mat

+0

Eso no funciona, incluso intenté configurarlo en 'viewWillAppear' y' viewDidAppear'. no tiene efecto. – Nadavrbn

Respuesta

7

Cambiar subvistas de su UITabBarController a un marco de tamaño completo, esto funcionó para mí:

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

Eres un salvavidas ¡muchas gracias! – Nadavrbn

+0

¡Muchas gracias! –

+0

Esto no funciona en iOS7, parece que queda algo extra. El rectángulo negro se va, pero ahora hay un borde gris donde solía estar ... – ryan0

0

Si cambiar el marco como @JoaT mencionado no funciona, asegúrese de que la vista del controlador de vista tenga configurada la máscara de realizing correcta.

Este enlace SO puede ser útil.

+0

Intenté 'UIViewAutoresizingFlexibleHeight' y' UIViewAutoresizingFlexibleBottomMargin' y no obtuve ningún resultado. También establecí esas propiedades: 'self.tabContoller.tabBar.autoresizesSubviews = YES;' y 'self.tabContoller.view.autoresizesSubviews = YES;' y no ayudó. ¿Debo configurarlo en otro lugar? – Nadavrbn

+0

¿Ha intentado imprimir el marco y el tamaño encuadernado de la barra de pestañas después de que aparezca el primer controlador de vista? Tal vez no es lo que esperamos que sea después de configurarlo en el delegado de la aplicación. – Mike

0

Lo intenté cambiando la altura y el origen de tabbar, para mí funcionó correctamente. Puedes intentar aumentando la altura de tu viewcontroller.

7

Trate de crear su propia clase que se extiende desde UITabBar y utilizar esta función:

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

Esto cambiará el tamaño la UITabBar al tamaño que desee. Simple y fácil.

+0

Me sorprende que me haya llevado tanto tiempo encontrar esta respuesta. Debería ser votado más. Esta es realmente la forma más fácil de hacer cosas funky a una UITabBar. Gracias. –

+0

Me alegro de que funcione para usted. De nada. – crisisGriega

+0

Esta es literalmente la única forma en que he podido obtener una altura personalizada en una UITabBar. Gracias. –