2015-10-02 7 views
6

Auf meinem iPhone App namens ich es habe nur unter den Projektzielen EinsatzinfosupportedInterfaceOrientations auf allen iPhones außer 6+

auf Hochformat beschränkt Es ist eine Seite, die ich nur in der Landschaft will und ich verwende die supportedInterfaceOrientations Methode zu erhalten Das.

Standard-Implementierung:

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

Es funktioniert perfekt auf allen iPhone-Geräten und iOS-Version außer für iPhone 6+. Die supportedInterfaceOrientations-Methode wird nie aufgerufen.

Ich kann keinen Grund finden, warum dies nur das iPhone 6+ betreffen könnte, würden alle Tipps sehr geschätzt werden.

+0

Ich habe gerade eine leere Single-View-Anwendung erstellt und überprüft, dass 'supportedInterfaceOrientations()' für 6 und 6 Plus aufgerufen wurde. Kann nicht sofort sehen, wie Ihr Code anders wäre, es sei denn, der View-Controller ist ein Child-View-Controller zu etwas anderem wie einer Navigations-VC, Split-VC, Tab-Leiste, VC, usw. Stellen Sie in diesem Fall sicher, dass der Eltern-View-Controller auch wie Sie reagiert Möchte. Einzig anders mit 6 Plus von der Spitze meines Kopfes ist es die Fähigkeit, eine geteilte Ansicht in der Landschaft zu verwenden. Vielleicht etwas da? –

+0

Der wahrscheinlichste Grund ist die Größenklasse für das iPhone 6+ wird reguläre Breite, aber kompakte Breite für alle anderen iPhones, wenn in Landscape vorgestellt. Was für ein Controller ist das: ein normaler View-Controller oder ein Container. Wenn es modal präsentiert wird, glaube ich, dass Sie 'preferredInterfaceOrientationForPresentation' verwenden müssen. –

+0

Laut den Dokumenten wird' supportedInterfaceOrientations' nur auf dem root-View-Controller oder auf Controllern aufgerufen, die den gesamten Bildschirm einnehmen. Die Wahrscheinlichkeit, dass der Controller, den Sie implementieren, dies auf dem iPhone 6+ ist, erfüllt die Kriterien nicht. Welche Art von Controller ist das?Anscheinend sollten Sie 'supportedInterfaceOrientations' in den meisten Containercontrollern wie UINavigationController, UITabBarController und UISplitViewController implementieren. –

Antwort

-1

bei this question suchen, versuchen Sie diesen Code-Schnipsel:

- (NSUInteger) supportedInterfaceOrientations 
{ 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) 
    { 
    // iPhone 5S and below: 320x480 
    // iPhone 6: 375x667 
    // iPhone 6 Plus: 414x736 
    CGSize screenSize = [UIScreen mainScreen].bounds.size; 
    // The way how UIScreen reports its bounds has changed in iOS 8. 
    // Using MIN() and MAX() makes this code work for all iOS versions. 
    CGFloat smallerDimension = MIN(screenSize.width, screenSize.height); 
    CGFloat largerDimension = MAX(screenSize.width, screenSize.height); 
    if (smallerDimension >= 400 && largerDimension >= 700) 
     return UIInterfaceOrientationMask.Landscape; 
    else 
     return (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown); 
    } 
    else 
    { 
    // Don't need to examine screen dimensions on iPad 
    return UIInterfaceOrientationMask.Landscape; 
    } 
} 

-Herzbube

einen offiziellen Apple-API fehlt das ist die Abhilfe, die ich gekommen bin oben mit:

[ Code]

Das Snippet nimmt einfach an, dass ein Bildschirm mit Dimensionen über einem Semi-Arbi Die gewählte Größe ist für die Rotation geeignet. Semi-willkürlich, denn eine Schwelle von 400x700 beinhaltet das iPhone 6 Plus, aber das iPhone 6 ausgeschlossen.

Obwohl diese Lösung eher einfach ist, mag ich sie genau wegen ihrer mangelnden Raffinesse. Ich muss nicht wirklich genau zwischen Geräten unterscheiden, also sind irgendwelche cleveren Lösungen wie die in Jef's answer für meine Zwecke übertrieben.

Alles, was ich war, den 1. und 3. Rückgabewert von UIInterfaceOrientationMaskAll zu UIInterfaceOrientationMask.Landscape ändern tat.

+1

Es tut mir leid, aber vielleicht habe ich die Frage nicht klar genug erklärt. Ich weiß, wie man die Landschaft für ein bestimmtes Gerät implementiert. Das Problem ist, dass supportedInterfaceOrientations nicht auf iPhone 6+ Geräten aufgerufen wird. Das ist 100% das Problem und es wird nur auf iPhone 6+ Geräten nicht aufgerufen. – JLoewy

+0

@JLoewy, Sie testen kein tatsächliches Gerät? –

3

können Sie diesen Code versuchen, es funktioniert für mich

// you have to import foundation 
import Foundation 

class YourViewController : UIViewController { 
    var device = self.platform() 

    override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(true) 

    if device.lowercaseString.rangeOfString("iphone6plus") != nil { 
    supportedInterfaceOrientations() 
    } 

    } 

    // add this method to your view controller 
    func platform() -> String { 
      var sysinfo = utsname() 
      uname(&sysinfo) // ignore return value 
      return NSString(bytes: &sysinfo.machine, length: Int(_SYS_NAMELEN), encoding: 
       NSASCIIStringEncoding)! as String 
     } 

Bitte beachten Sie, dass dies nicht auf dem Simulator laufen wird, aber perfekt auf dem tatsächlichen Gerät laufen.

+0

Wohin geht dieser Code? – JLoewy

+0

hey JLoewy Ich habe die Antwort bearbeitet, ich hoffe, es wird klargestellt – OverD

Verwandte Themen