W innym przypadku może pojawić się ten komunikat o błędzie. Szukałem godzinami, aż znalazłem problem. Ten wątek był bardzo pomocny po kilkukrotnym przeczytaniu.
Jeśli główny kontroler widoku jest obrócony do orientacji poziomej i wywołujesz niestandardowy kontroler widoku podrzędnego, który powinien być wyświetlany w orientacji pionowej, ten komunikat o błędzie może się pojawić, gdy kod wygląda następująco:
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationPortrait;
}
Pułapka polegała na tym, że inteligencja xcode zasugerowała „UIInterfaceOrientationPortrait” i nie przejmowałem się tym. Na pierwszy rzut oka wydawało się to słuszne.
Nazwa prawej maski
UIInterfaceOrientationMaskPortrait
Zwróć uwagę na mały wrostek „Maska” , w przeciwnym razie Twój widok podrzędny zakończy się wyjątkiem i wspomnianym powyżej komunikatem o błędzie.
Nowe wyliczenia są nieco przesunięte. Stare wyliczenia zwracają nieprawidłowe wartości!
(w UIApplication.h można zobaczyć nową deklarację: UIInterfaceOrientationMaskPortrait = (1 << UIInterfaceOrientationPortrait) )
Rozwiązaniem jest:
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
// ATTENTION! Only return orientation MASK values
// return UIInterfaceOrientationPortrait;
return UIInterfaceOrientationMaskPortrait;
}
W szybkim użyciu
override func shouldAutorotate() -> Bool {
return true
}
override func supportedInterfaceOrientations() -> Int {
return Int(UIInterfaceOrientationMask.Portrait.rawValue)
}