Autolayout ändert die Größe meines Fensters

8

Ich habe eine Schreibfeder mit aktiviertem automatischen Layout, die die Ansichten eines View-Controllers enthält, und separat ein Fenster mit einer Platzhalteransicht, um sie hinzuzufügen. Der Platzhalter hat Einschränkungen in Bezug auf seine Superansicht und andere Ansichten im Fenster, und bevor ich meinen View-Controller einbeziehe, ändere ich die Größe des Platzhalters mit dem Fenster so, wie ich es möchte. Später lade ich die Feder und füge ihre Top-Level-Ansicht als Unteransicht des Platzhalters hinzu, und ich erstelle auch manuell Bedingungen, um sie an den Kanten des Platzhalters auszurichten.

Alles in Ordnung, und ich verwende dieses Muster in mehreren Fällen innerhalb meiner App, aber in einigen dieser Fälle wird mein Fenster nach dem Hinzufügen der Ansicht in der Größe verändert! Es wird auf die minimale Größe für die hinzugefügte Ansicht verkleinert anstatt auf die aktuelle Größe des Fensters.

Bisher habe ich das nur dadurch verhindert, dass beim Hinzufügen der Ansicht und beim Erstellen ihrer Integritätsregeln der Rahmen der Ansicht so festgelegt wird, dass er die anfängliche Größe für den aktuellen Status des Platzhalters und des Fensters hat. Das ist manchmal ok, aber ich möchte in der Lage sein, komplexere Einschränkungen zu definieren, die einfach jede Kante mit einem Platzhalter-Superview ausrichten. Ich möchte die Rahmenarithmetik nicht für jeden dieser Fälle programmieren.

Weiß jemand was los ist? Wenn das Fenster bereits die Größe meines Platzhalters diktiert und nicht umgekehrt, was muss ich tun, wenn ich die Unteransicht hinzufüge, damit die aktuelle Fenstergröße immer noch Vorrang hat?

Ich habe das Popup-Menü in Xcodes IB-Fenstern gesehen, in dem es anscheinend um Beschränkungen geht, die nur Subviews und Superview betreffen (für alle meine Nibs auf den ersten gesetzt). Was passiert mit dieser Funktionalität? Darüber habe ich noch nichts gefunden.

    
Pierre Houston 30.08.2012, 07:21
quelle

1 Antwort

9

Sie möchten die Komprimierungswiderstandspriorität auf etwas kleiner als NSLayoutPriorityWindowSizeStayPut setzen, was 500 entspricht. Das bedeutet, dass die Größe des Fensters Vorrang vor der Größe der Ansicht hat.

Sie können dies über den IB-Größeninspektor festlegen.

Oder Sie können es programmgesteuert mit -[NSView setContentCompressionResistancePriority:forOrientation:]

festlegen     
iain 09.02.2013, 05:23
quelle