2014-12-17 6 views
15

Ho un'applicazione universale sviluppata in iOS8 (XCode 6.1.1). Supporterà tutti i 4 orientamenti (sinistra, destra, ritratto & sottosopra).Orientamento capovolto per iOS 8, opzione XCode abilitata, continua a non funzionare

Il problema è che, sebbene in XCode siano selezionate le quattro opzioni per gli orientamenti supportati, solo i caratteri a destra, a destra, & funzionano correttamente. Quindi, c'è un bug su XCode o iOS8? Il mio info.plist mostra tutti gli orientamenti supportati, ma quando eseguo l'app sul simulatore o sul dispositivo non "capovolgi" l'orientamento quando è capovolto. (PS: è un'app Singleview, non ha alcun controller di navigazione).

Grazie!

Cleverson

risposta

14

bene, ho capito lo scopo delle opzioni sulla configurazione del progetto ... Tra le opzioni che stai dicendo "il mio sostegno app questi orientamenti" e non "la mia applicazione deve utilizzare questi quattro opzioni "... Quindi, su iPhone devi dire esplicitamente che un particolare ViewController supporta tutti gli orientamenti (l'upsidedown non fa parte degli orientamenti predefiniti, per una ragione che non so) ... Il codice dovrebbe essere come questo per il supporto di tutti gli orientamenti:

override func supportedInterfaceOrientations() -> Int{ 
    return Int(UIInterfaceOrientationMask.All.rawValue) 
} 
+1

Non funziona da iOS 9 beta (Xcode beta 4) - anche se ho corretto la firma per restituire un valore di tipo 'UIInterfaceOrientationMask' (altrimenti non verrà compilato). –

+1

Non funziona su Xcode 9, sembra che la funzione sia andata completamente. – codehearted

+0

Probabilmente framework e Swift 4 modifiche ... Verificherò ... – Cleversou

13

Con Swift 2.1, è possibile semplificare @ risposta di Cleversou a:

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask 
{ 
    return .All 
} 

Con Swift 2,3

override var supportedInterfaceOrientations : UIInterfaceOrientationMask { 
    return .all 
} 
+1

Affascinante, grazie. È interessante notare che sembra che tu debba farlo solo sul tuo CONTROLLORE DI VISTA DI ALTO LIVELLO. Penseresti, devi farlo "fino in fondo". – Fattie

5

Se si esegue all'interno di un controller barra di controller di navigazione o di scheda, è necessario fare la stessa sostituzione nella sottoclasse o sostituire tutte le istanze con un'estensione:

extension UINavigationController { 
    override public func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { 
    return .All 
    } 
} 

extension UITabBarController { 
    override public func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { 
    return .All 
    } 
} 

Edit: come di Swift 3.0/iOS 9 (e forse anche prima) questo sarebbe:

extension UINavigationController { 
    override open var supportedInterfaceOrientations : UIInterfaceOrientationMask  { 
     return .all 
    } 
} 

extension UITabBarController { 
    override open var supportedInterfaceOrientations : UIInterfaceOrientationMask  { 
     return .all 
    } 
} 
+0

Eccellente, funziona come un fascino. Grazie! –

+0

Grande. Ma non sembra applicarsi alla schermata di avvio. – claude31