Posiadanie zawartego (osadzonego)UINavigationController, który można przeciągnąć w górę, aby wypełnić ekran, odkryłem dziwny błąd. Dokładnie w momencie, gdy kontroler nawigacyjny pokrył cały ekran, jego główny widok zmienił rozmiar, a między tym widokiem a paskiem nawigacyjnym pojawiła się przerwa około 20 punktów.
To pojawia się że jest to „zamierzone” zachowanie w UINavigationController. Ale jak sobie z tym poradzić?
Odpowiedzi:
1 dla odpowiedzi № 1Po wielu godzinach prób znalezienia rozwiązania (a nawet przeczytaniu, że nie można tego obejść), znalazłem rozwiązanie, które działa wystarczająco dobrze.
W mojej podklasie UINavigationController dodałem następujące zastąpienie:
override public func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews();
if self.view.frame.size.height == Screen.height {
for childVC in childViewControllers {
childVC.view.frame = CGRectMake(0, navigationBar.frame.size.height, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height - navigationBar.frame.size.height);
}
}
}
0 dla odpowiedzi nr 2
Myślę, że 20 pikseli jest branych przez UIStatusBar
. Jeśli używasz pliku xib lub serii ujęć z automatycznym układem, możesz ustawić górne ograniczenie na górny przewodnik układu, aby różnica 20 pikseli była poprawnie obsługiwana.
0 dla odpowiedzi № 3
Jest teraz niewielka różnica. Być może jakieś zmiany składniowe, ale zrobiło to dla mnie! Tak!! Dzięki @Lukas Kalinski
override public func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews();
if self.view.frame.size.height == UIScreen.mainScreen().bounds.height {
for childVC in childViewControllers {
childVC.view.frame = CGRectMake(0, navigationBar.frame.size.height, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height - navigationBar.frame.size.height);
}
}
}