Невозможно повернуть ориентацию интерфейса к портрету вверх ногами
Как на симуляторе iPhone, так и на iPhone 3GS (iOS 6) я не могу установить ориентацию портрета вверх ногами. У меня есть только один ViewController. Я добавил этот код в нем:
-(BOOL) shouldAutorotate{
return YES;
}
-(UIInterfaceOrientation) preferredInterfaceOrientationForPresentation{
return UIInterfaceOrientationPortraitUpsideDown;
}
- (NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationPortrait | UIInterfaceOrientationPortraitUpsideDown;
}
-(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
if (toInterfaceOrientation==UIInterfaceOrientationPortrait || toInterfaceOrientation==UIInterfaceOrientationPortraitUpsideDown) {
return YES;
}
return NO;
}
Я также добавил это в AppDelegate.m:
-(NSUInteger) application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
return UIInterfaceOrientationPortrait | UIInterfaceOrientationPortraitUpsideDown;
}
Я также проверил файл plist, обе ориентации присутствуют там. На моей раскадровке в Simulated Metrics Orientation установлено значение Inferred. Я ничего не делаю в своем приложении DidFinishLaunchingWithOptions, кроме возврата YES. Я только что добавил UIImageView внутри этого ViewController. Можно ли заставить эту ориентацию работать?
3 ответа
supportedInterfaceOrientations
возвращает NSUInteger
, Он возвращает все ориентации интерфейса, которые поддерживает контроллер представления, маску значений ориентации интерфейса.
Вам необходимо вернуть значения, определенные в UIInterfaceOrientationMask
Enum, как показано ниже:
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown);
}
Я знаю, что есть ответ, который сработал, но для всех, кто все еще сталкивается с той же проблемой:
У меня была похожая проблема, которая была связана с Xcode: ротация портрета не поддерживалась, несмотря на возвращение YES
в - (BOOL) shouldAutorotateToInterfaceOrientation:
для всех случаев. Оказалось, что в итоговом окне редактора проекта моей цели включены "Поддерживаемые ориентации интерфейса":
Вышеуказанные пункты "Информация о развертывании iPhone / iPad" не делали этого, а раздел "Информация о развертывании iPad", по-видимому, контролировал действия симулятора, несмотря на то, что я использовал только симулятор iPhone. После того, как я включил ту же ориентацию в этом разделе, симуляция iPhone работала, и я смог проверить, что произошло, когда симулятор вращался....
Я перепробовал много способов для этого. Кажется, это работает только одним способом, но глобально через приложение, а не только для конкретного контроллера представления.
Во-первых, вы должны проверить перевернутую ориентацию устройства в общих настройках цели.
Затем в расширении контроллера навигации вы переопределяете supportedInterfaceOrientations
метод
extension UINavigationController {
override public func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
return .All
}
}