Zrobiłem mały test, i mimo że nie podoba mi się sposób, jest dość proste do zrobienia.
Po wyszukaniu prywatnej metody, która mogła zadziałać, nie mogłem jej znaleźć. Wszystko znalazłem:
@property BOOL forceFullHeightInLandscape;
- (BOOL)isMinibar;
Nie ma setter dla -isMinibar
, więc nie możemy ustawić, że. Przypuszczam, że zwraca wartość na podstawie jej wysokości. Również forceFullHeightInLandscape
został ustawiony na NO
, jednak wciąż nie dostosował swojej wysokości.
Podczas wymiany autoresizingMask
zawierać UIViewAutoresizingFlexibleHeight
, widok zrobił Resize być mniejsze, ale teraz to było zbyt małe. Jednak -isMinibar
nagle zwrócił YES
. To sprawiło, że pomyślałem o tym, żeby zmienić rozmiar widoku, dostosowując go do odpowiedniej wysokości.
Więc nie pójdziemy, to metoda, która działa, nawet bez prywatnych rozmów API:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[self.navigationBar performSelector:@selector(sizeToFit) withObject:nil afterDelay:(0.5f * duration)];
}
Jedno będziesz mieć do czynienia z to, że poglądy pod poprzeczkę nie dostanie dostosowany do mniejszego paska, tak aby pojawiła się przerwa między paskiem a widokami poniżej. Najprostszym sposobem rozwiązania tego problemu jest dodanie widoku kontenera, podobnie jak w przypadku UINavigationController
. Można by wymyślić coś takiego:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[self performSelector:@selector(resizeViewsForNavigationBar) withObject:nil afterDelay:(0.5f * duration)];
}
- (void)resizeViewsForNavigationBar {
[self.navigationBar sizeToFit];
// Resize containerView accordingly.
CGRect containerViewRect = self.containerView.frame;
containerViewRect.origin.y = CGRectGetMaxY(self.navigationBar.frame);
containerViewRect.size.height = CGRectGetMaxY(self.view.frame) - containerViewRect.origin.y;
self.containerView.frame = containerViewRect;
}
+1 za doskonałą odpowiedź – vodkhang
Dzięki za odpowiedź, nie mogę tego teraz przetestować, ale odpowiem, gdy spróbuję. Co ciekawe, widok kontenera jest już poprawnie zmieniany, tak jakby pasek nawigacji stał się krótszy, niż powinien. – ryyst
Wypróbowałem to już teraz i działa idealnie! Ponieważ widok kontenera jest już poprawnie zmieniany, potrzebuję tylko wywołania 'sizeToFit'. – ryyst