2012-05-24 13 views
6

Wziąłem zwykłego UITabBar i zmieniłem jego obraz tła na niestandardowy, który ma niższą wysokość, więc zmieniłem height z frame. Na początku dostałem pustą przestrzeń pod paskiem kart. więc zmieniłem też origin z frame. Ale teraz pusta przestrzeń przeniósł się powyżej paska kart i jest to wynik:Odstęp między niestandardowym interfejsem UITabBar i ViewController

space above tab bar

I to jest kod deklarując pasek kart w 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; 

myślę, że Problem polega na tym, że linie ViewController rysują się powyżej stałej przestrzeni, która jest wysokością zwykłego paska kart. Czy istnieje sposób, aby to zmienić?

+0

Spróbuj po prostu zwiększając "wysokość" widoku 'viewcontroller. Jeśli nie możesz utworzyć pliku xib, zrób to ręcznie w 'viewDidLoad'. – Mat

+0

To nie działa, próbowałem nawet ustawić go w 'viewWillAppear' i' viewDidAppear'. to nie działa. – Nadavrbn

Odpowiedz

7

Zmień subviews Twojego UITabBarController do pełnowymiarowej ramce, to pracował dla mnie:

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

Jesteś bardzo wdzięczny za życie! – Nadavrbn

+0

Dziękuję bardzo! –

+0

To nie działa w iOS7, wydaje się, że zostało coś jeszcze. Czarny prostokąt zniknie, ale teraz jest szara kreska, na której kiedyś była ... – ryan0

0

Jeśli zmiana ramki takiej jak wspomniane @JoaT nie działa, upewnij się, że widok kontrolera widoku ma poprawny zestaw maski autouzupełniania.

Ten link może być pomocny pod numerem SO.

+0

Próbowałem 'UIViewAutoresizingFlexibleHeight' i' UIViewAutoresizingFlexibleBottomMargin' i nie otrzymałem wyników. Ustawiam te właściwości: 'self.tabContoller.tabBar.autoresizesSubviews = YES;' i 'self.tabContoller.view.autoresizesSubviews = YES;' i to nie pomogło. Czy powinienem ustawić go gdziekolwiek indziej? – Nadavrbn

+0

Czy próbowałeś wydrukować ramkę i związany rozmiar paska kart po wyświetleniu pierwszego kontrolera widoku? Może to nie jest to, czego oczekujemy po ustawieniu go w delegacie aplikacji. – Mike

0

Próbowałem przez zmianę wysokości i początku paska zakładek, dla mnie działało to poprawnie. Możesz spróbować zwiększyć wysokość swojego kontrolera viewcontroller.

7

Spróbuj utworzyć własną klasę rozciągający się od UITabBar i korzystać z tej funkcji:

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

Spowoduje to zmianę rozmiaru UITabBar do pożądanego rozmiaru. Proste i łatwe.

+0

Jestem zaskoczony, że znalezienie takiej odpowiedzi zajęło mi tyle czasu. Powinien być bardziej przejęty. To naprawdę jest najprostszy sposób na robienie fajnych rzeczy na UITabBar. Dziękuję Ci. –

+0

Cieszę się, że to działa dla ciebie. Zapraszamy. – crisisGriega

+0

To jest dosłownie jedyny sposób, w jaki udało mi się uzyskać niestandardową wysokość na UITabBar. Dziękuję Ci. –

Powiązane problemy