Это сообщение об ошибке может появиться в другом случае. Я искал часы, пока не нашел проблему. Эта ветка была очень полезна после того, как прочитала ее пару раз.
Если ваш главный контроллер представления повернут в альбомную ориентацию и вы вызываете настраиваемый контроллер вспомогательного представления, который должен отображаться в портретной ориентации, это сообщение об ошибке может появиться, когда ваш код выглядит следующим образом:
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationPortrait;
}
Ловушка здесь заключалась в том, что intellisense xcode предложил "UIInterfaceOrientationPortrait", и меня это не волновало. На первый взгляд это казалось правильным.
Правильная маска названа
UIInterfaceOrientationMaskPortrait
Помните о маленьком инфиксе «Маска» , иначе ваше подвид будет иметь исключение и указанное выше сообщение об ошибке.
Новые перечисления сдвинуты на бит. Старые перечисления возвращают недопустимые значения!
(в UIApplication.h вы можете увидеть новое объявление: UIInterfaceOrientationMaskPortrait = (1 << UIInterfaceOrientationPortrait) )
Решение:
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
// ATTENTION! Only return orientation MASK values
// return UIInterfaceOrientationPortrait;
return UIInterfaceOrientationMaskPortrait;
}
В быстром использовании
override func shouldAutorotate() -> Bool {
return true
}
override func supportedInterfaceOrientations() -> Int {
return Int(UIInterfaceOrientationMask.Portrait.rawValue)
}