2014-12-30 10 views
21

Wie iPad Landscape und Portrait-Bildschirme mit verschiedenen Layouts mit Größe Klasse zu entwerfen. Ich konnte für beide Orientierungen nur w-regulär und h-regulär finden. Beispiel: Ich brauche zwei Ansichten vertikal im Portrait auszurichten und horizontal in Landschaft mit GrößenklasseiPad Landscape und Portrait verschiedene Layouts mit Size Class

+1

für iphone ist es möglich, Erstellen Sie 2 Layouts für verschiedene Ausrichtungen mit der Größenklasse. Wie können wir dies für iPad mit Größenklasse und Autolayout erreichen? –

+0

Haben Sie eine Lösung gefunden? Ich habe das gleiche Problem. – cmii

+3

Eigentlich ist das tatsächlich eine spezifische Frage. Und kein Apple hat keine Größenklassen entworfen, um eine für die iPad-Landschaft spezifische Größenklasse zu aktivieren, was für mich absolut keinen Sinn ergibt, da Sie dann manuell mit Landschaft im Code umgehen müssen. Ich stimme einigen Ansätzen nicht zu, die das Größenklassensystem hacken. Behandle es einfach im Code. – n8tr

Antwort

6

Schließlich fand ich eine Lösung:

if traitCollection.verticalSizeClass == .Regular && traitCollection.horizontalSizeClass == .Regular { 

    var orientation:UIInterfaceOrientation = UIApplication.sharedApplication().statusBarOrientation; 
    if orientation == UIInterfaceOrientation.LandscapeLeft || orientation == UIInterfaceOrientation.LandscapeRight { 
      // orientation is landscape 


    } else { 
      // orientation is portrait 

    } 
} 
6

Es scheint, beide iPad Orientierungen als die gleiche Behandlung Apples Absicht zu sein - - Aber wie einige von uns feststellen, gibt es sehr legitime Design-Gründe, das UI-Layout für iPad Portrait vs. iPad Landscape zu variieren.

jedoch bitte diese Antwort für einen anderen Ansatz zur Anpassung der Größenklassen sehen zu tun, was wir brauchen: https://stackoverflow.com/a/28268200/4517929

+0

Ich entwickle Universal App, in der ich Ihren Ansatz versucht habe. Es funktionierte gut für iPad, aber wenn ich Einschränkungen für w festlege: Beliebige, h: Beliebige, die ich bekomme ** Nicht in der Lage, gleichzeitig Einschränkungen zu erfüllen. ** Fehler –

5

Für Swift 3 es würde wie folgt aussehen:

override func overrideTraitCollection(forChildViewController childViewController: UIViewController) -> UITraitCollection? { 
    if UI_USER_INTERFACE_IDIOM() == .pad && 
     view.bounds.width > view.bounds.height { 

     let collections = [UITraitCollection(horizontalSizeClass: .regular), 
          UITraitCollection(verticalSizeClass: .compact)] 
     return UITraitCollection(traitsFrom: collections) 

    } 

    return super.overrideTraitCollection(forChildViewController: childViewController) 
} 

Es wird verwenden wRhC anstelle von wRhR für iPad-Geräte im Querformatmodus. Setzen Sie diesen Code in Ihren Basisansicht-Controller, d. H. Diese Regel funktioniert für alle Controller, die von diesem Controller bereitgestellt wurden. können Sie stellen keine zusätzlichen Bedingungen hier ... Zum Beispiel, wenn Sie diese Regel wollen nur für bestimmte View-Controller zu arbeiten, Ihre wenn Betreiber würde wie folgt aussehen:

if UI_USER_INTERFACE_IDIOM() == .pad && 
     childViewController is YourSpecificViewController && 
     view.bounds.width > view.bounds.height { 

     let collections = [UITraitCollection(horizontalSizeClass: .regular), 
          UITraitCollection(verticalSizeClass: .compact)] 
     return UITraitCollection(traitsFrom: collections) 

    } 
+1

Sie können unbeabsichtigte Folgen dabei finden. Wenn dieser Ansichtscontroller z. B. einen anderen modalen Ansichtscontroller als Formularblatt anzeigt, wird er wie auf einem iPhone angezeigt - Vollbild im Hochformat - was wahrscheinlich nicht Ihren Vorstellungen entspricht. Darüber hinaus wird es, wenn es geöffnet ist, wenn Sie in die Landschaft drehen, auf den nicht vollen Bildschirm zurückkehren und bleibt auch so, wenn Sie zum Hochformat zurückkehren. Keine angenehme Erfahrung. – Michael

Verwandte Themen