Ich habe das Standard-NSWindow in einer neuen Anwendung mit einem einzigen NSView erstellt. Ich erstelle dann einen neuen NSViewController, der sein eigenes XIB und eine Ansicht hat. Im App-Delegierten mache ich das Offensichtliche
%Vor%OK, wie setze ich eine Beschränkung in der neuen Art ein, damit meine Unteransicht ihre Größe mit dem Fenster identisch hält, d. h. es ist Superview. Es scheint nicht automatisch zu funktionieren. Autoresizingssubviews ist für beide Ansichten aktiviert.
Grundsätzlich müssen Sie vier Dinge beschränken:
Wenn die visuelle Einschränkung für Sie nicht funktioniert, können Sie diese vier Einschränkungen einzeln im Code erstellen. Verwenden Sie die Methode +constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:
constant:
, um genaue Beziehungen zwischen den Attributen verschiedener Ansichten anzugeben. Zum Beispiel kann die obige Bedingung # 1 folgendermaßen ausgedrückt werden:
und # 3 könnten sein:
%Vor%Sobald Sie diese vier Einschränkungen erstellt haben, können Sie sie nach Bedarf zu Ihrem Superview hinzufügen.
Beachten Sie, dass es mehrere Möglichkeiten gibt, denselben Effekt wie oben zu erreichen:
Sie können wahrscheinlich auch die gleichen Einschränkungen in einer visuellen Darstellung finden, wie in Peter Hoseys Antwort. Zum Beispiel könnte eine Constraint gleicher Breite wie @"[mySubview(==mySuperview)]"
mit dem entsprechenden Views Dictionary aussehen.
Beachten Sie, dass Auto-Layout-Anleitung bietet eine Fülle von Informationen zu Einschränkungen, einschließlich der Fehlersuche bei Fehlern.
Ziehen Sie im Editor für die Unteransicht die Größe der Unteransicht, bis sie dieselbe Größe wie die Superansicht hat. Xcode erstellt automatisch eine geeignete Breitenbeschränkung.
Im Code würde ich |-0-[mySubview]-0-|
(angepasst aus dem Beispiel in die Constraint-Syntax-Dokumentation ).
Genau wie Peter schrieb, sollten Sie die visuelle Sprache verwenden.
Dabei ist jedoch die Reihenfolge wichtig: Wenn Sie eine Abhängigkeit erstellen, müssen alle Referenzen, auf die sie verweist, Teil derselben Ansichtshierarchie sein.
In Ihrem Beispiel müsste der Code also wie folgt aussehen:
%Vor%Sie können setContentView:, contentView: und contentRectForFrameRect überschreiben, damit sie sich mit der window.frame-großen Ansicht befassen.
Wenn Sie eine Drittanbieterbibliothek verwenden möchten, können Sie dies mit ReactiveCocoaLayout in einer einfachen Zeile erreichen:
%Vor%Tags und Links macos cocoa constraints nsview