Die Visuelle Format Sprache können nicht für jeden möglichen Fall verwendet werden. Ich glaube, dass die Aneinanderreihung der beiden Ansichten ein solcher Fall ist.
Ich würde Sie Anker verwenden Layout vorschlagen stattdessen wie folgt aus:
override func viewDidLoad() {
super.viewDidLoad()
let redView = UIView()
redView.backgroundColor = .redColor()
redView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(redView)
let greenView = UIView()
greenView.backgroundColor = .greenColor()
greenView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(greenView)
let redHoriz = NSLayoutConstraint.constraintsWithVisualFormat("H:|-20-[redView]-20-|", options: [], metrics: nil, views: ["redView": redView])
NSLayoutConstraint.activateConstraints(redHoriz)
let redVert = NSLayoutConstraint.constraintsWithVisualFormat("V:|-50-[redView]-50-|", options: [], metrics: nil, views: ["redView": redView])
NSLayoutConstraint.activateConstraints(redVert)
// Set greenView to occupy same space as the redView
greenView.leftAnchor.constraintEqualToAnchor(redView.leftAnchor).active = true
greenView.rightAnchor.constraintEqualToAnchor(redView.rightAnchor).active = true
greenView.topAnchor.constraintEqualToAnchor(redView.topAnchor).active = true
greenView.bottomAnchor.constraintEqualToAnchor(redView.bottomAnchor).active = true
}
Die Visuelle Format Sprache können Sie Teile der Ansichten auszurichten. Zum Beispiel können Sie die Oberseiten der Unterseiten von zwei Ansichten ausrichten, indem Sie [.AlignAllTop, .AlignAllBottom]
als das options
Argument von constraintsWithFormat
übergeben. Sie können jedoch nur Werte ausrichten, die senkrecht zur Richtung des visuellen Formats sind. Wenn Sie also ein horizontales Layout angeben, können Sie die Oberseiten und Unterseiten der Ansichten ausrichten. Wenn Sie ein vertikales Layout angeben, können Sie die linken und Rechte ausrichten.
Sie können zwei Ansichten ausrichten, indem Sie zwei zusätzliche Ansichten einfügen. In dem Beispiel unten, nimmt die blaue Ansicht, um die oben und untere Ausrichtung der roten Ansicht, und die gelbe Ansicht nimmt die und rechts Ausrichtung der roten Ansicht von links. Dann wird die grüne Ansicht ausgerichtet auf die oben und Boden der blauen Ansicht und die links und rechts der gelben Ansicht, so dass es auf die rote Ansicht ausgerichtet ist.
Schließlich, das Verstecken der blauen und gelben Ansichten lässt Sie mit dem Setup, das Sie wünschen.
let redView = UIView()
redView.backgroundColor = .redColor()
redView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(redView)
let greenView = UIView()
greenView.backgroundColor = .greenColor()
greenView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(greenView)
let blueView = UIView()
blueView.translatesAutoresizingMaskIntoConstraints = false
blueView.backgroundColor = .blueColor()
blueView.hidden = true
view.addSubview(blueView)
let yellowView = UIView()
yellowView.translatesAutoresizingMaskIntoConstraints = false
yellowView.backgroundColor = .yellowColor()
yellowView.hidden = true
view.addSubview(yellowView)
let redHoriz = NSLayoutConstraint.constraintsWithVisualFormat("H:|-80-[redView]-80-|", options: [], metrics: nil, views: ["redView": redView])
NSLayoutConstraint.activateConstraints(redHoriz)
let redVert = NSLayoutConstraint.constraintsWithVisualFormat("V:|-80-[redView]-80-|", options: [], metrics: nil, views: ["redView": redView])
NSLayoutConstraint.activateConstraints(redVert)
let blueHorizVert = NSLayoutConstraint.constraintsWithVisualFormat("H:[redView][blueView]|", options: [.AlignAllTop, .AlignAllBottom], metrics: nil, views: ["redView": redView, "blueView": blueView])
NSLayoutConstraint.activateConstraints(blueHorizVert)
let yellowHorizVert = NSLayoutConstraint.constraintsWithVisualFormat("V:[redView][yellowView]|", options: [.AlignAllLeft, .AlignAllRight], metrics: nil, views: ["redView": redView, "yellowView": yellowView])
NSLayoutConstraint.activateConstraints(yellowHorizVert)
let greenTopBottom = NSLayoutConstraint.constraintsWithVisualFormat("H:[greenView][blueView]|", options: [.AlignAllTop, .AlignAllBottom], metrics: nil, views: ["greenView": greenView, "blueView": blueView])
NSLayoutConstraint.activateConstraints(greenTopBottom)
let greenLeftRight = NSLayoutConstraint.constraintsWithVisualFormat("V:[greenView][yellowView]|", options: [.AlignAllLeft, .AlignAllRight], metrics: nil, views: ["greenView": greenView, "yellowView": yellowView])
NSLayoutConstraint.activateConstraints(greenLeftRight)
So Sie können tun es mit VFL, aber es ist nicht elegant. Ich würde vorschlagen, dass Sie bei der Verwendung von Ankern bleiben.
Durch Lesen der Dokumente? Dies ist keine "Do my work for me" -Seite. Machen Sie einen Versuch, es selbst zu tun, und wenn Sie es nicht funktionieren können, posten Sie Ihren Code hier und wir werden Ihnen helfen, es zu debuggen. –
@DuncanC Ich denke nicht, dass es eine unangemessene Frage ist. Ich habe daran gearbeitet. Ich arbeite gerade jetzt daran. Ich habe keine ähnliche Frage auf SO gesehen, also habe ich sie gepostet. Und ich dachte, es ist eine einfache, klare Frage, die ich brauche, um meinen falschen Code nicht zu posten. Ich werde mehr suchen und meins später veröffentlichen. – allenlinli