Swift – Rotatie alleen toestaan ​​op iPad

Hoe kan ik toestaan ​​dat mijn universele app, geschreven in Swift op iOS 8.3 SDK, alleen de portretmodus op iPhone ondersteunt, maar zowel de portret- als de landschapsmodus op de iPad?

Ik weet dat dit in het verleden is gedaan in AppDelegate. Hoe kan ik dit doen in Swift?


Antwoord 1, autoriteit 100%

Je kunt het programmatisch doen, of beter nog, je kunt eenvoudig de Info.plist van je project bewerken (wat praktischer zou moeten zijn, aangezien het een globale apparaatconfiguratie is)

Voeg gewoon de toets “Ondersteunde interface-oriëntaties (iPad)” toe

voer hier de afbeeldingsbeschrijving in


Antwoord 2, autoriteit 7%

Je zou het programmatisch kunnen doen

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

en dan

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

of een andere draairichting die u standaard wilt hebben.

Dat zou moeten detecteren of het apparaat dat je gebruikt een iPad is en alleen draaien op dat apparaat toestaan.

BEWERKEN: aangezien je alleen portret op iPhone wilt,

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

Antwoord 3, autoriteit 6%

Ik weet niet zeker of het antwoord van Chris werkt door de sleutel “Supported Interface Orientaties (iPad)” te kopiëren en plakken; waarschijnlijk niet afgaand op de XML-bron van info.plist. voor het bereiken van verschillende oriëntatieondersteuning. u kunt de info.plistXML-bron openen en als volgt bewerken:

<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> 

En er is een gemakkelijke benadering van xcode UI. Ga naar je projectinstellingen. selecteer uw doel op het tabblad “Algemeen” en vervolgens kunt u in het gedeelte “Deployment Info” eerst iphone/ipad selecteren en de apparaatoriëntaties markeren die u voor elk apparaat afzonderlijk wilt ondersteunen en vervolgens de apparaten wijzigen in “Universeel”. het zal de bovenstaande XML onder de motorkap genereren.
voer hier de afbeeldingsbeschrijving in

de optie “Universeel” hier toont de selecties die gebruikelijk zijn tussen iPhone en iPad.


Antwoord 4

Ik weet dat dit in het verleden is gedaan in AppDelegate. Hoe kan ik dit doen in Swift?

De taal die u gebruikt, verandert niets aan de architectuur van de toepassing. U doet dit in Swift op dezelfde manier als in Objective-C, namelijk door te implementeren:

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

in uw aanvraag gemachtigde.


Antwoord 5

Als je dit wilt instellen voor een specifieke ViewController (alles toestaan ​​op iPad maar alleen staand op iPhone) in Swift 4:

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

Other episodes