Unter OSX 10.8 schränke ich eine Unteransicht so ein, dass sie dieselbe Größe wie die übergeordnete Ansicht hat

8

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.

    
ahwulf 14.11.2012, 03:55
quelle

6 Antworten

7

Grundsätzlich müssen Sie vier Dinge beschränken:

  1. Der führende Platz Ihrer Unteransicht für die Superansicht ist null
  2. Der obere Platz Ihrer Unteransicht für die Superansicht ist null.
  3. Die Breite Ihrer Unteransicht entspricht der Breite der Superview
  4. Die Höhe Ihrer Unteransicht entspricht der Breite der Superansicht

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:

%Vor%

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 das nachgestellte Leerzeichen und das untere Leerzeichen anstelle der Breite und Höhe einschränken
  • Sie können das center X und das center Y anstelle der führenden und oberen Leerzeichen
  • festlegen

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.

    
Tim 03.12.2012 19:41
quelle
4

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 ).

    
Peter Hosey 14.11.2012 18:34
quelle
2

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%     
danyowdee 03.12.2012 19:59
quelle
0

Sie können setContentView:, contentView: und contentRectForFrameRect überschreiben, damit sie sich mit der window.frame-großen Ansicht befassen.

    
Nickolay Olshevsky 05.12.2012 19:06
quelle
0

Wenn Sie eine Drittanbieterbibliothek verwenden möchten, können Sie dies mit ReactiveCocoaLayout in einer einfachen Zeile erreichen:

%Vor%     
zakdances 15.09.2013 12:43
quelle
-1

Ich hatte das gleiche Problem und bin mit dieser Lösung gelandet, die mit SDK 10.10 arbeitet. Legen Sie einfach autoresizingMask der neuen Ansicht als das übergeordnete Fenster fest. Nur eine Zeile Code und es funktioniert wie ein Charme ...

%Vor%     
Werner 02.11.2014 20:26
quelle

Tags und Links