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.
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)
}
}
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. –
@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. –
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