2014-09-21 9 views
6

Ich verwende Storyboard und Xcode 6, um App-Ansichten zu entwerfen, aber ich stehe vor diesem Problem: Ich möchte verschiedene Positionen von Unteransichten für Hoch- und Querformat zuweisen. Zum Beispiel:Verschiedene Hoch-/Querformatansichten in Storyboard und Swift

Portrait Landscape

Da jetzt habe ich diese programmatisch mit willRotateToInterfaceOrientation und Statusleiste erreicht ipad Orientierung zu erhalten.

Mit Xcode 6 sind die iPhone-Layouts für Hoch- und Querformat unterschiedlich, aber für das iPad gleich (normal, normal). Es ist möglich, diese Positionen mit Einschränkungen zu erreichen?

Danke.

Antwort

7

Ja, Sie können dies mit Einschränkungen tun.

Zuerst müssen Sie Einschränkungen für die Superview erstellen, nicht für die nächste Ansicht. Benachbarte Ansichten ändern ihre Position. Daher möchten wir, dass die Abhängigkeiten nicht in Relation zu den anderen Ansichten stehen. Ein Beispiel zum Festlegen der Einschränkungen finden Sie im folgenden Screenshot.

Constraint Setup

Als nächstes verbinden die Einschränkungen, die Sie zu IBOutlets werden modifiziert werden, damit wir sie programmatisch ändern. Für Ihr Beispiel würde dies die Einschränkungen sein:

@IBOutlet var greenViewTrailingConstraint: NSLayoutConstraint! 
@IBOutlet var greenViewBottomConstraint: NSLayoutConstraint! 

@IBOutlet var redViewTopConstraint: NSLayoutConstraint! 
@IBOutlet var redViewLeadingConstraint: NSLayoutConstraint! 
@IBOutlet var redViewBottomConstraint: NSLayoutConstraint! 

@IBOutlet var blueViewTrailingConstraint: NSLayoutConstraint! 
@IBOutlet var blueViewTopConstraint: NSLayoutConstraint! 
@IBOutlet var blueViewLeadingConstraint: NSLayoutConstraint! 

Schließlich aktualisieren Sie die Constraint Konstanten basierend auf UIInterfaceOrientation. Auch hier Ihr Beispiel verwenden, sieht der Code so etwas wie diese:

override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) { 
    let padding: CGFloat = 16.0 

    // since we're calling this before the rotation, the height and width are swapped 
    let viewHeight = self.view.frame.size.width 
    let viewWidth = self.view.frame.size.height 

    // if landscape 
    if UIInterfaceOrientationIsLandscape(toInterfaceOrientation) { 
     greenViewTrailingConstraint.constant = (viewWidth/2.0) + (padding/2.0) 
     greenViewBottomConstraint.constant = padding 

     blueViewTopConstraint.constant = (viewHeight/2.0) + (padding/2.0) 
     blueViewTrailingConstraint.constant = padding 
     blueViewLeadingConstraint.constant = (viewWidth/2.0) + (padding/2.0) 

     redViewTopConstraint.constant = padding 
     redViewBottomConstraint.constant = (viewHeight/2.0) + (padding/2.0) 
     redViewLeadingConstraint.constant = (viewWidth/2.0) + (padding/2.0) 
    } else { // else portrait 
     greenViewBottomConstraint.constant = (viewHeight/2.0) + (padding/2.0) 
     greenViewTrailingConstraint.constant = padding 

     blueViewTopConstraint.constant = (viewHeight/2.0) + (padding/2.0) 
     blueViewTrailingConstraint.constant = (viewWidth/2.0) + (padding/2.0) 
     blueViewLeadingConstraint.constant = padding 

     redViewLeadingConstraint.constant = (viewWidth/2.0) + (padding/2.0) 
     redViewBottomConstraint.constant = padding 
     redViewTopConstraint.constant = (viewHeight/2.0) + (padding/2.0) 
    } 
} 
+0

Nizza Lösung! ! Aber ich habe mich nur gefragt, ob es gut ist, Einschränkungen während der Gerätedrehung programmgesteuert hinzuzufügen und zu entfernen. –

+0

@RashmiRanjanmallick, Gute Frage! Wir fügen jedoch keine Einschränkungen hinzu oder entfernen sie. Wir ändern nur ihre Konstanten. Das Ändern von Constraint-Konstanten ist allgemein üblich, insbesondere bei der UIView-Animation oder der Gerätedrehung. –

+0

Danke, ich frage mich nur, warum in aller Welt nicht das Storyboard wie Hochformat wählen und Hochformat einrichten, Querformat wählen und Querformat einrichten. – fullMoon

1

Ich weiß, dass dieser Beitrag ein alter ist aber nur für info.I Sie die folgenden Schritte versucht und es wie erwartet funktioniert.

Schritt1. Wählen Sie Controller anzeigen aus. Wählen Sie eine beliebige Option aus dem Größenklassen-Steuerelement aus. Und fügen Sie die Ansichten in diesem Modus hinzu. Any Mode Schritt2. Ändern Sie den Modus, um alle iPhones von der Größenklassensteuerung zu portraitieren, fügen Sie Einschränkungen für die Ansicht für den Hochformatmodus hinzu. Potrait mode Schritt3. Ähnliches Ändern Sie den Modus, um alle iPhones zu strukturieren, fügen Sie Beschränkungen für die Ansicht für den Querformat-Modus hinzu.

Bitte beachten Sie: Die Einschränkungen unabhängig sind jetzt für Hoch- und Quer

0

Drücken Sie die Plus „+“ neben dem Constant einer Einschränkung und fügen Sie Variationen für verschiedene Bildschirme:

enter image description here

Verwandte Themen