Tworzę aplikację na iPhone'a i potrzebuję jej w trybie portretu, więc jeśli użytkownik przesunie urządzenie na bok, nie obraca się automatycznie. Jak mogę to zrobić?Jak wyłączyć orientację poziomą?
Odpowiedz
Aby wyłączyć orientację dla określonego kontrolera widoku, należy teraz zastąpić supportedInterfaceOrientations
i preferredInterfaceOrientationForPresentation
.
- (NSUInteger) supportedInterfaceOrientations {
// Return a bitmask of supported orientations. If you need more,
// use bitwise or (see the commented return).
return UIInterfaceOrientationMaskPortrait;
// return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
}
- (UIInterfaceOrientation) preferredInterfaceOrientationForPresentation {
// Return the orientation you'd prefer - this is what it launches to. The
// user can still rotate. You don't have to implement this method, in which
// case it launches in the current orientation
return UIInterfaceOrientationPortrait;
}
Jeśli kierujesz coś starszego niż iOS 6, chcesz metodę shouldAutorotateToInterfaceOrientation:
. Zmieniając, kiedy zwraca tak, będziesz określić, czy będzie on obracać się do wspomnianej orientacji. Pozwoli to tylko na normalną orientację pionową.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
// Use this to allow upside down as well
//return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown);
}
Zauważ, że shouldAutorotateToInterfaceOrientation:
została zaniechana w iOS 6.0.
Usunięcie metody shouldAutorotateToInterfaceOrientation
ze swojej klasy również całkowicie działa. Jeśli nie planujesz rotacji, nie ma sensu mieć metody w klasie, im mniej kodu, tym lepiej.
Ta odpowiedź jest już nieaktualna; 'shouldAutorotateToInterfaceOrientation' jest przestarzałe od lat. –
@MarkAmery https://developer.apple.com/reference/uikit/uiviewcontroller/1621419-shouldautorotate nie ma powiadomienia o wycofaniu. –
@VaddadiKartick Jest to również inna metoda niż wymieniona w tej odpowiedzi; Nie jestem pewien, o co ci chodzi. –
Xcode 4 i poniżej
dla tych, którzy go brakowało: Można użyć ekranu ustawień projektu, aby ustalić kierunki całej aplikacji (nie ma potrzeby, aby zastąpić metody w każdym kontrolerze):
To tak proste, jak przełączanie obsługiwanych orientacji interfejsu. Możesz znaleźć, klikając swój projekt w lewym panelu> kartę docelową aplikacji> kartę Podsumowanie.
To jest przestarzałe; interfejs użytkownika jest teraz inny. –
Xcode 5 i powyżej
- Kliknij projektu w projekcie Navigator w lewym panelu, aby otworzyć ustawienia projektu
- przejdź do zakładki General.
- Odznacz opcje, których nie chcesz w Deployment Info sekcji, pod Orientacja Device
Nie mogę odznaczyć opcji Krajobraz na kopalni. Natychmiast je włącza. Ponadto, jeśli usunę je z listy Info.plist, odkłada je. – Almo
Swift 3 Jeśli masz navigationController, podklasa to tak (tylko w trybie portretowym):
class CustomNavigationViewController: UINavigationController {
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return UIInterfaceOrientationMask.portrait
}
override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
return UIInterfaceOrientation.portrait
}
}
Jeśli widok oller znajduje się w kontrolerze nawigacyjnym, a następnie w kontrolerze nawigacyjnym należy je wdrożyć. –
@RrRogers Zrobiłem tak, ale to nie działa. Zobacz http://pastebin.com/dLfLLP2j Każdy kontroler poprawnie implementuje supportedInterfaceOrientations. Pierwszy kontroler widoku poprawnie pokazuje portret, nawet gdy aplikacja jest uruchamiana z urządzenia na ekranie głównym iPhone'a Plus. Ale kiedy przechodzę do innego kontrolera, obracaj urządzenie w przód iw tył, aby ustawić drugi kontroler na krajobraz, i powróć, pierwszy kontroler jest teraz w krajobrazie. To, czego chcę, to to, że pierwszy kontroler ma być portretowy, a drugi - cały. –
Proponuję przeniesienie 'NSUinteger' z' supportedInterfaceOrientations' (pierwszej linii kodu) na 'UIInterfaceOrientationMask'. Xcode 8 ostrzega o "Konfliktowym typie zwracania w implementacji" supportedInterfaceOrientations ":" UIInterfaceOrientationMask "(aka" enum UIInterfaceOrientationMask ") a" NSUInteger "(inaczej" unsigned long ")" i wywołuje wrażenie. Dzięki za odpowiedź – GabLeRoux