Autolayout funktioniert programmgesteuert nicht

Ich möchte einer Ansicht programmgesteuert eine UIImageView hinzufügen und Einschränkungen hinzufügen, um sie vertikal und horizontal zu zentrieren. Mit dem Storyboard funktioniert es aber nicht programmatisch.

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        var transitionImageView = UIImageView()
        transitionImageView.frame.size = CGSize(width: 60, height: 68)
        transitionImageView.contentMode = UIViewContentMode.ScaleToFill

        var transitionImage = UIImage(named: "SoProxyLogo60pt")
        transitionImageView.image = transitionImage
        self.view.addSubview(transitionImageView)

        // Position
        let transitionImageViewConstraintCenterX = NSLayoutConstraint(item: transitionImageView, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1, constant: 0)
        transitionImageViewConstraintCenterX.identifier = "Transition Image View Constraint Center X"
        let transitionImageViewConstraintCenterY = NSLayoutConstraint(item: transitionImageView, attribute: .CenterY, relatedBy: .Equal, toItem: self.view, attribute: .CenterY, multiplier: 1, constant: 0)
        transitionImageViewConstraintCenterY.identifier = "Transition Image View Constraint Center Y"

        self.view.addConstraint(transitionImageViewConstraintCenterX)
        self.view.addConstraint(transitionImageViewConstraintCenterY)        
    }
}

Ich habe diese Fehler:

2014-10-27 14: 45: 18.420 TransitionTest1 [3438: 70b] Bedingungen können nicht gleichzeitig erfüllt werden. Möglicherweise ist mindestens eine der Einschränkungen in der folgenden Liste eine, die Sie nicht möchten. Versuchen Sie Folgendes: (1) Sehen Sie sich jede Einschränkung an und versuchen Sie herauszufinden, was Sie nicht erwarten. (2) Finden Sie den Code, der die unerwünschte (n) Einschränkung (en) hinzugefügt hat, und korrigieren Sie ihn. (Hinweis: Wenn Sie NSAutoresizingMaskLayoutConstraints sehen, die Sie nicht verstehen, lesen Sie die Dokumentation der UIView-Eigenschaft translatesAutoresizingMaskIntoConstraints.)

<NSLayoutConstraint:0x7fbb5b210790 'Transition Image View Constraint Center X' UIImageView:0x7fbb5af682d0.centerX == UIView:0x7fbb5af674f0.centerX>,
<NSAutoresizingMaskLayoutConstraint:0x7fbb5b25eee0 h=--& v=--& UIImageView:0x7fbb5af682d0.midX == + 30>,
<NSAutoresizingMaskLayoutConstraint:0x7fbb5b258ee0 h=-&- v=-&- UIView:0x7fbb5af674f0.width == UIViewControllerWrapperView:0x7fbb5b257e20.width>,
<NSAutoresizingMaskLayoutConstraint:0x7fbb5b260840 h=-&- v=-&- UIViewControllerWrapperView:0x7fbb5b257e20.width == UINavigationTransitionView:0x7fbb5af5b020.width>,
<NSAutoresizingMaskLayoutConstraint:0x7fbb5b2612b0 h=-&- v=-&- UINavigationTransitionView:0x7fbb5af5b020.width == UILayoutContainerView:0x7fbb5af2adf0.width>,
<NSAutoresizingMaskLayoutConstraint:0x7fbb5b261d40 h=-&- v=-&- UILayoutContainerView:0x7fbb5af2adf0.width == UIWindow:0x7fbb5b251ba0.width>,
<NSAutoresizingMaskLayoutConstraint:0x7fbb5b25ff30 h=--- v=--- H:[UIWindow:0x7fbb5b251ba0(320)]>

Will versuchen, durch Brechen der Einschränkung zu erholen

Break on objc_exception_throw, um dies im Debugger abzufangen. Die Methoden in der UIConstraintBasedLayoutDebugging-Kategorie in UIView, die in aufgeführt sind, können ebenfalls hilfreich sein.

2014-10-27 14: 45: 18.421 TransitionTest1 [3438: 70b] Bedingungen können nicht gleichzeitig erfüllt werden. Möglicherweise ist mindestens eine der Einschränkungen in der folgenden Liste eine, die Sie nicht möchten. Versuchen Sie Folgendes: (1) Sehen Sie sich jede Einschränkung an und versuchen Sie herauszufinden, was Sie nicht erwarten. (2) Finden Sie den Code, der die unerwünschte (n) Einschränkung (en) hinzugefügt hat, und korrigieren Sie ihn. (Hinweis: Wenn Sie NSAutoresizingMaskLayoutConstraints sehen, die Sie nicht verstehen, lesen Sie die Dokumentation der UIView-Eigenschaft translatesAutoresizingMaskIntoConstraints.)

<NSLayoutConstraint:0x7fbb5b252fd0 'Transition Image View Constraint Center Y' UIImageView:0x7fbb5af682d0.centerY == UIView:0x7fbb5af674f0.centerY>,
<NSAutoresizingMaskLayoutConstraint:0x7fbb5b25f140 h=--& v=--& UIImageView:0x7fbb5af682d0.midY == + 34>,
<NSAutoresizingMaskLayoutConstraint:0x7fbb5b258f80 h=-&- v=-&- UIView:0x7fbb5af674f0.height == UIViewControllerWrapperView:0x7fbb5b257e20.height>,
<NSAutoresizingMaskLayoutConstraint:0x7fbb5b260930 h=-&- v=-&- UIViewControllerWrapperView:0x7fbb5b257e20.height == UINavigationTransitionView:0x7fbb5af5b020.height>,
<NSAutoresizingMaskLayoutConstraint:0x7fbb5b2613b0 h=-&- v=-&- UINavigationTransitionView:0x7fbb5af5b020.height == UILayoutContainerView:0x7fbb5af2adf0.height>,
<NSAutoresizingMaskLayoutConstraint:0x7fbb5b261e30 h=-&- v=-&- UILayoutContainerView:0x7fbb5af2adf0.height == UIWindow:0x7fbb5b251ba0.height>,
<NSAutoresizingMaskLayoutConstraint:0x7fbb5b262730 h=--- v=--- V:[UIWindow:0x7fbb5b251ba0(480)]>

Will versuchen, durch Brechen der Einschränkung zu erholen

Break on objc_exception_throw, um dies im Debugger abzufangen. Die Methoden in der UIConstraintBasedLayoutDebugging-Kategorie in UIView, die in aufgeführt sind, können ebenfalls hilfreich sein.

(Es ist schwer, hier ein gutes Layout zu haben;))

Ich verstehe nicht, warum diese Einschränkungen nicht funktionieren. Sie scheinen mit denen im Storyboard identisch zu sein.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage