Mam ViewController z kontrolerem nawigacyjnym i kontrolerem paska kart. Ten ViewController ma 2 przyciski, które przełączają widoczność widoku przewijania i widoku mapy. Najważniejsze jest, aby te 2 przyciski zawsze pojawiały się w tym samym miejscu, niezależnie od orientacji lub widoku, który jest widoczny.Mapowanie w systemie iOS przechodzi pod pasek nawigacji, pasek stanu i kontroler paska kart
Problem polega na tym, że MapView nie będzie prawidłowo dopasowany do rozmiaru. Jeśli po prostu daję ramkę z self.view.bounds, przechodzi ona pod pasek nawigacji/pasek kart - w zasadzie zajmuje cały ekran. To wyrzuca lokalizację moich przycisków przełączania.
Zauważyłem, że mój ScrollView robi to samo (używając koloru tła i półprzezroczystego paska nawigacji), ale położenie podprzestrzeni na nim pozostaje w widocznym obszarze (między paskiem nawigacyjnym a paskiem kart). Więc kiedy dodaję przyciski przełączania, pokazują się we właściwym miejscu.
Po naciśnięciu przycisków przełączania, ponownie przypisuję nadrzędny widok przycisków do wyświetlanego widoku (ScrollView lub MapView). To zawsze działa w widoku przewijania, ale ze względu na pozycjonowanie, przechodzą one pod paskiem nawigacji, gdy wyświetlany jest MapView.
Próbowałem ręcznie utworzyć ramkę dla MapView, ale otrzymałem dziwne wyniki. Używam tego na ramie:
CGRect mapFrame = CGRectMake(
0,
(self.navigationController.navigationBar.frame.size.height + [UIApplication sharedApplication].statusBarFrame.size.height),
self.view.frame.size.width,
(
self.view.frame.size.height
- (self.navigationController.navigationBar.frame.size.height + [UIApplication sharedApplication].statusBarFrame.size.height + self.tabBarController.tabBar.frame.size.height)
)
);
I wtedy ustawić auto rozmiaru maski
[self.mapView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin];
Ale z tego, jeśli wejdę do kontrolera widoku w trybie poziomym - w MapView jest na ekranie. Jeśli wchodzę w tryb portretu, a następnie obracam do pejzażu, górny margines jest wyłączony, ale około 10 punktów, więc nadal jest pod paskiem nawigacji (i ma widoczny margines między paskiem kart a spodem widoku mapy).
Jak mogę zrobić, aby widoki podrzędne MapView wyświetlały się tylko w widocznym regionie, takim jak ScrollView? Nie przeszkadza mi to, że sama mapa przechodzi pod paskiem nawigacji/paskiem na kartę
należy oznaczyć to jako odpowiedź też. :) Dzięki za pomoc. – James
Dzięki twojemu rozwiązaniu. – jhondge