2013-09-23 8 views
11

Ustawiłem UITabBar jako nieprzezroczysty w Storyboard, ale nadal wydaje się, półprzeźroczysty. Kiedy ustawiam swój własny UITabBarController z setBarStyle, dostępny jest tylko OpaqueBlack.Autolayout ignoruje UITabBar (zawartość pod paskiem) na iOS7

Ale to najmniejszy problem. Bez względu na to, co robię, zawartość mojego widoku zostaje umieszczona pod paskiem kart, tak jak jest ignorowana przez ayutolayout. Na Storyboard wszystko wygląda dobrze. coś nie działa w środowisku wykonawczym?

Och, najważniejsza rzecz. Problem występuje tylko w systemie iOS7!

Oto moje ustawienia ViewController w serii ujęć:

enter image description here

I tu jest problematyczne treści (UITableView), który zostaje umieszczony pod UITabBar na ios7 aplikacji. Wygląda dobrze w serii ujęć, choć:

enter image description here

i wreszcie UITableView ograniczenia:

enter image description here

Odpowiedz

21

Wyrażając to na viewDidLoad, rozwiązuje problem:

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { 
    [self setEdgesForExtendedLayout:UIRectEdgeNone]; 
} 
+1

tak działa dobrze dla mnie. ale moja aplikacja ma tabbacontroller alos. Reszta kontrolki viewcontroller działa dobrze. Problem w kontrolce widoku Tabbar. załóżmy, że mam 5 kart. 1. kiedy klikam na zakładkę (ekran listy otwarty) działa dobrze, gdy klikam na szczegół listy otwiera się dobrze. do tej pory działa dobrze 2. po kliknięciu na zakładce 2 (inna lista) otworzyć. w tym czasie, gdy klikam na tab1, niż na ekranie szczegółów, ramka widoku głównego zmniejsza się do 64 pikseli. próbowałem siłowo zwiększyć, ale nie działa .. co mogę zrobić w tym przypadku? – Hitarth

+5

Zamiast sprawdzać konkretną wersję, lepiej sprawdzić istnienie selektora: 'if ([self responsesToSelector: @selector (setEdgesForExtendedLayout :)])' – DarkDust

4

utworzyć te macros w twojej plik projektu <projectname>-Prefix.pch, aby działały globalnie:

#define SYSTEM_VERSION_EQUAL_TO(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame) 
#define SYSTEM_VERSION_GREATER_THAN(v)    ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending) 
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) 
#define SYSTEM_VERSION_LESS_THAN(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) 
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending) 

Następnie umieścić ten po [super viewDidLoad] w viewDidLoad metody każdym viewController który jest posiadające ten problem:

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) 
{ 
     [self setEdgesForExtendedLayout:UIRectEdgeNone]; 
} 
+4

Zamiast sprawdzać konkretną wersję, lepiej sprawdzić istnienie selektora: 'if ([self responsesToSelector: @selector (setEdgesForExtendedLayout :)])' – DarkDust

9

Xcode dostarcza również Zautomatyzowane możliwości:

[self setEdgesForExtendedLayout:UIRectEdgeNone]; 

obrębie ujęć dla danego ViewController poprzez sekcję Extend Edges :

enter image description here

Wystarczy wyłączyć zarówno pod górną barów i Pod barów dolnych opcji. Są domyślnie włączone.

+0

Dziękuję, odpowiedź powinna być zaakceptowana. – Blacky

0

W modelu Swift UIRectEdgeNone jest niedostępny. Możesz osiągnąć to samo z następującym kodem:

edgesForExtendedLayout = [] 
Powiązane problemy