/ / Przerwa między UINavigationBar a zawartością UINavigationController - ios, swift, uinavigationcontroller

Luka między UINavigationBar a zawartością UINavigationController - ios, swift, uinavigationcontroller

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 № 1

Po 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.

wprowadź opis obrazu tutaj


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);
}
}
}