Utworzyłem pusty projekt (XCode 4.2 IOS SDK 5), dodałem do niego nowy widok i uczyniłem z niego główny kontroler widoku wewnątrz appDelegate, więc gdy aplikacja działa, wyświetla ten widok poprawnie, jednak dodałem do widoku kontroler tabulacji, utworzyłem IBOutlet za to w nowo utworzonym widoku i dodałem tę linię do metody viewDidLoad widoku:
[self.view addSubview:self.tabController.view];
dzięki czemu pasek z kartami ładuje się poprawnie w telefonie iPhonesymulator, ale z małym problemem, którego nie mogłem naprawić: połowa tego paska zakładek jest przesunięta w dół symulatora, co zapobiega pojawianiu się tytułów zakładek, dokładnie tak, jak na poniższym zrzucie ekranu:
Jak mogę rozwiązać ten problem?
Odpowiedzi:
2 dla odpowiedzi № 1Najprawdopodobniej dzieje się tak z powodu paska stanu. Ale ponieważ widok podrzędny, w którym można wstawiać kontroler, może mieć dowolny rozmiar, najbardziej uniwersalnym rozwiązaniem jest:
[tabController.view setFrame:self.view.bounds];
(zakładając self.view - to widok, w którym go dodajesz)
1 dla odpowiedzi nr 2
Widok z włączonym paskiem kart ma wysokość 480 pikseli, alewidok, do którego go dodajesz, jest mniejszy z powodu paska stanu. Oznacza to, że zaczyna się o 22 piksele za nisko, a kończy o 22 piksele za nisko - od dołu ekranu.
Jeśli chcesz, aby pasek kart był globalny dla aplikacji, połącz go z IBOutlet w delegacie aplikacji, zrób to w metodzie didFinishLaunching:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// ...
// Add the tab bar controller"s view to the window and display.
[window addSubview:tabController.view];
[window makeKeyAndVisible];
return YES;
}
Spowoduje to dodanie go do głównego okna zamiast do innego widoku. Spowoduje to zakotwiczenie go na górze ekranu, więc dół będzie u dołu ekranu.