Подтвердить что ты не робот

Фиксированная ориентация не работает на ipad ios 8 swift xcode 6.2

Я заблокировал ориентацию приложения к портрету из общей настройки приложения, например

portrait

но все же, когда я запускаю свое приложение на ipad, он вращается!?

Итак, где я должен заблокировать ориентацию?

почему яблоко добавило эту функцию в настройки, пока она не работает!?

UPDATE:

Я попытался реализовать этот viewController как общий для всех viewController.

import Foundation
import UIKit

class GeneralViewController: UIViewController {

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        let value = UIInterfaceOrientation.Portrait.rawValue
        UIDevice.currentDevice().setValue(value, forKey: "orientation")
    }

    override func supportedInterfaceOrientations() -> Int {
        return Int(UIInterfaceOrientationMask.Portrait.rawValue)
    }


    override func preferredInterfaceOrientationForPresentation() -> UIInterfaceOrientation {
        return UIInterfaceOrientation.Portrait
    }

    override func shouldAutorotate() -> Bool {
        return false
    }
}

этот снимок, взятый из основного навигационного контроллера моего приложения.

Pic of answer 1

все еще не работает!

Как это работает?

4b9b3361

Ответ 1

Вам не нужен дополнительный код, я работаю над Xcode 7.0.1, я заметил, что когда я блокирую ориентацию экрана только на портрете, он блокируется только в iPhone, чтобы заблокировать его в iPads, вам нужно выбрать iPad от устройств (вместо Universal) и проверьте портрет и снимите отметку с других, а затем снова верните устройства в Universal, так как я обнаружил, что Universal отражается только в iPhone, это может быть какая-то ошибка в Xcode.

Ответ 2

Вы можете переопределить ваше свойство контроллера представления shouldAutorotate

override var shouldAutorotate: Bool {
    return false 
}

Если ваш контроллер представления встроен в контроллер навигации, вы можете создать собственный контроллер навигации:

class PortraitNavigationController: UINavigationController {

    override var shouldAutorotate: Bool {
        return false 
    }
    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
    }
    */
}

Ответ 3

У меня также была такая же проблема. Что для меня работало → Выберите iPad вместо Universal в типе устройства → Снимите еще одну из трех опций, кроме Portrait → Select Universal. Готово.

Ответ 4

Это будет комментарий, добавленный к решению Мохаммеда Эльрашиди, но у меня нет репутации, чтобы комментировать. Я использую XCode 9.1 и Swift 3.

Мое приложение требует некоторых графических экранов для авторотации, но все остальные экраны остаются фиксированными. Моя проблема заключалась в том, что конфигурация устройства "iPad" в разделе "Общая информация" > "Информация о развертывании" была настроена непоследовательно с iPhone и универсальными устройствами. У меня были "Портрет", "Пейзаж слева" и "Пейзаж справа" для iPhone и Universal, но все ориентации были проверены на iPad (включая "Upside Down" ). Простое снятие флажка "Upside Down" заставило iPad-устройство соблюдать toAutorotate и поддерживало вызовы InterfaceOrientations в моей логике Swift.

My Info.plist теперь выглядит следующим образом, и я могу программно включить или отключить авторотацию для iPad.

<key>UISupportedInterfaceOrientations</key>
<array>
    <string>UIInterfaceOrientationPortrait</string>
    <string>UIInterfaceOrientationLandscapeLeft</string>
    <string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
    <string>UIInterfaceOrientationPortrait</string>
    <string>UIInterfaceOrientationLandscapeLeft</string>
    <string>UIInterfaceOrientationLandscapeRight</string>
</array>

Ответ 5

Я просто хотел добавить что-то еще, что вам нужно сделать, после устранения проблемы, следуя приведенному выше решению:

В XCode не забудьте также установить флажок "Требуется полный экран" в разделе "Основные"> "Цели".

Справка: поддержка многозадачности iPad требует следующих ориентаций