Swift - разрешить поворот только на iPad
Как я могу разрешить моему универсальному приложению, написанному в Swift на iOS 8.3 SDK, поддерживать только портретный режим на iPhone, но как портретный, так и альбомный режим на iPad?
Я знаю, что в прошлом это было сделано в AppDelegate. Как я могу сделать это в Swift?
Ответы
Ответ 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
}