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

Swift - разрешить поворот только на iPad

Как я могу разрешить моему универсальному приложению, написанному в Swift на iOS 8.3 SDK, поддерживать только портретный режим на iPhone, но как портретный, так и альбомный режим на iPad?

Я знаю, что в прошлом это было сделано в AppDelegate. Как я могу сделать это в Swift?

4b9b3361

Ответ 1

Вы можете сделать это программно или, еще лучше, вы можете просто отредактировать свой проект Info.plist(что должно быть более практичным, поскольку это глобальная конфигурация устройства)

Просто добавьте ключ "Поддерживаемые интерфейсы (iPad)"

enter image description here

Ответ 2

Вы можете сделать это программно

override func shouldAutoRotate() -> Bool {
    if UIDevice.currentDevice().userInterfaceIdiom == .Pad {
        return true
    }
    else {
        return false
    }
}

а затем

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

или любой другой ориентации вращения, которую вы хотите по умолчанию.

Это должно определить, является ли устройство, которое вы используете, iPad и разрешаете вращение только на этом устройстве.

EDIT: поскольку вам нужен только портрет на iPhone,

 override func supportedInterfaceOrientations() -> Int {
    if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
        return UIInterfaceOrientation.Portrait.rawValue
    }
    else {
        return Int(UIInterfaceOrientationMask.All.rawValue)
    }
}

Ответ 3

Я знаю, что в прошлом это было сделано в AppDelegate. Как я могу сделать это в Swift?

Используемый язык не изменяет архитектуру приложения. Вы делаете это в Swift так же, как и в Objective-C, т.е. Реализуя:

optional func application(_ application: UIApplication,
         supportedInterfaceOrientationsForWindow window: UIWindow?) -> Int

в делетете приложения.

Ответ 4

Я не уверен, работает ли Крис, просто копируя и вставляя ключ "Поддерживаемые интерфейсы (iPad)"; вероятно, не судя по источнику XML info.plist. для достижения различной ориентации. вы можете открыть info.plist XML info.plist и отредактировать его следующим образом:

<key>UISupportedInterfaceOrientations</key>
<array>
    <string>UIInterfaceOrientationPortrait</string>
</array>


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

И есть облегченный подход от пользовательского интерфейса xcode. Перейдите в настройки вашего проекта. выберите свою цель на вкладке "Общие", а затем в разделе "Информация о развертывании" вы можете сначала выбрать iphone/ipad и пометить ориентации устройств, которые вы хотите поддерживать для каждого устройства, и затем переключить устройства на "Универсальный". он будет генерировать вышеупомянутый xml под капотом. enter image description here

"Универсальный" вариант показывает варианты, которые являются общими для iPhone и iPad.

Ответ 5

Если вы хотите установить это для определенного ViewController (разрешить все на iPad, но только портрет на iPhone) в Swift 4:

override var supportedInterfaceOrientations:UIInterfaceOrientationMask {
    return UIDevice.current.userInterfaceIdiom == .pad ? UIInterfaceOrientationMask.all : UIInterfaceOrientationMask.portrait
}