, da Sie nicht Setup können die Einschränkungen, die Sie alles nur mit VFL benötigen diese eine Lösung sein könnte:
var view1: UIView!
var view2: UIView!
var view3: UIView!
var variableConstraints = [NSLayoutConstraint]()
let metrics = ["width": 100, "height": 100]
var views: [String: AnyObject]!
override func viewDidLoad() {
super.viewDidLoad()
view1 = UIView()
view1.backgroundColor = UIColor.redColor()
view1.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(view1)
view2 = UIView()
view2.backgroundColor = UIColor.blueColor()
view2.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(view2)
view3 = UIView()
view3.backgroundColor = UIColor.greenColor()
view3.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(view3)
views = ["v1": view1, "v2": view2, "v3": view3]
setupFixedConstraints()
setupVariableConstraintsForSize(nil)
}
private func setupFixedConstraints() {
// width and height
NSLayoutConstraint.activateConstraints(NSLayoutConstraint.constraintsWithVisualFormat("[v2(width)]", options: [], metrics: metrics, views: views))
NSLayoutConstraint.activateConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[v2(height)]", options: [], metrics: metrics, views: views))
// center x and center y
NSLayoutConstraint(item: view2, attribute: .CenterX, relatedBy: .Equal, toItem: view, attribute: .CenterX, multiplier: 1, constant: 0).active = true
NSLayoutConstraint(item: view2, attribute: .CenterY, relatedBy: .Equal, toItem: view, attribute: .CenterY, multiplier: 1, constant: 0).active = true
}
private func setupVariableConstraintsForSize(size: CGSize?) {
// remove existing constraints
NSLayoutConstraint.deactivateConstraints(variableConstraints)
variableConstraints.removeAll()
let size = size ?? view.frame.size
if size.width > size.height {
// landscape
variableConstraints += NSLayoutConstraint.constraintsWithVisualFormat("[v1(==v2)][v2][v3(==v2)]", options: [.AlignAllTop, .AlignAllBottom], metrics: metrics, views: views)
} else {
// portrait
variableConstraints += NSLayoutConstraint.constraintsWithVisualFormat("V:[v1(==v2)][v2][v3(==v2)]", options: [.AlignAllLeading, .AlignAllTrailing], metrics: metrics, views: views)
}
// activate constraints
NSLayoutConstraint.activateConstraints(variableConstraints)
}
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
setupVariableConstraintsForSize(size)
super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
}
Haben Sie versucht UIStackView https: //developer.apple.com/library/ios/documentation/UIKit/Reference/UIStackView_Class_Reference/ –
afaik Sie können mit vfl keine Gleichheits-Integritätsbedingung (eine der Einschränkungen, die Sie benötigen) einrichten. –