ich ein Beispielprojekt haben, die das Problem hierWie Einschränkungen nach einer addSubview hinzufügen, damit die Subview mit dem Superview passt die Größe
https://github.com/ericgorr/autolayout_with_addsubview.git
ich CalcView genannt haben einen Blick zeigt, was ich will als programmatisch hinzufügen Unteransicht zu einer Ansicht im Hauptfenster der App. Wenn ich mein Fenster verkleinere, Ich möchte CalcView in der Größe geändert werden.
In windowDidLoad in MainWindowController, füge ich die Subview, indem Sie:
let calcViewController = ELIZCalcView()
let calcView = calcViewController.view
calcContentView?.addSubview(calcViewController.view)
Ich versuche, die Einschränkungen hinzufügen, indem Sie:
let bindings = [ "calcView": calcView ]
let horizontalContraint:[AnyObject] = NSLayoutConstraint.constraintsWithVisualFormat("H:|[calcView]|", options: NSLayoutFormatOptions(0), metrics: nil, views: bindings)
let verticalContraint:[AnyObject] = NSLayoutConstraint.constraintsWithVisualFormat("V:|[calcView]|", options: NSLayoutFormatOptions(0), metrics: nil, views: bindings)
calcContentView?.addConstraints(horizontalContraint)
calcContentView?.addConstraints(verticalContraint)
Nun, für jemanden, der weiß, wie man richtig zu interpretieren, dass Code ist es sehr offensichtlich, dass es nicht funktioniert. Nachdem ich meine App ausgeführt habe, kann ich das Fenster nicht mehr ändern. Darüber hinaus sehe ich die folgende Fehlermeldung in der Konsole:
2015-07-04 16:04:45.019 aocsCalc[5797:3526462] Unable to simultaneously satisfy constraints: (
"<NSLayoutConstraint:0x618000082440 V:|-(0)-[NSView:0x600000120f00] (Names: '|':aocsCalc.ELIZHighlightView:0x608000120500)>",
"<NSAutoresizingMaskLayoutConstraint:0x618000084100 h=--& v=&-- V:|-(-2)-[NSView:0x600000120f00] (Names: '|':aocsCalc.ELIZHighlightView:0x608000120500)>")
Will attempt to recover by breaking constraint <NSLayoutConstraint:0x618000082440 V:|-(0)-[NSView:0x600000120f00] (Names: '|':aocsCalc.ELIZHighlightView:0x608000120500)>
Set the NSUserDefault NSConstraintBasedLayoutVisualizeMutuallyExclusiveConstraints to YES to have -[NSWindow visualizeConstraints:] automatically called when this happens. And/or, break on objc_exception_throw to catch this in the debugger.
Wenn ich die vertikale Einschränkung zu entfernen, geht die Fehlermeldung weg und ich kann das Fenster vertikal skalieren.
Also, welche einfache Sache muss ich tun CalcView wird mit dem Fenster in der Größe geändert?
Ich bin nicht viel Erfahrung mit OS X Entwicklung, aber ich denke, UIView und NSView die gleiche handeln, wenn es um Einschränkungen kommt. [Docs] (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSView_Class/index.html#//apple_ref/occ/instp/NSView/translatesAutoresizingMaskIntoConstraints) sagen, dass NSView dies getan hat diese Eigenschaft. Du musst es falsch eingegeben haben oder so. – NKorotkov
Das Ändern von einem Funktionsaufruf zu einer Eigenschaftszuweisung löste den Kompilierungsfehler, aber das tatsächliche Verhalten, das ich sehe, ist viel schlechter. Die Ansichten sind nicht mehr richtig auf dem Fenster positioniert. Ich habe das Git-Hub-Projekt mit der Änderung aktualisiert. – ericg
Ihre ursprüngliche Frage wurde beantwortet, also sollten Sie erwägen, NKorotkov den Kredit zu geben. Ich habe Ihr aktualisiertes Projekt heruntergeladen und ausgeführt und kann das Problem nicht wirklich erkennen. Sie sollten explizit angeben, was Sie erreichen möchten, aber nicht können - wahrscheinlich in einer separaten Frage (+1 für das Posten von Beispielprojekten übrigens). –