Die Einschränkung "Breite entspricht Höhe" in Interface Builder


92

Ich kann keine Möglichkeit finden, eine 'quadratische' Einschränkung zu erstellen, was bedeutet, dass 'Breite gleich Höhe' in Interface Builder ist. Ich denke, es ist möglich, solche Einschränkungen programmgesteuert hinzuzufügen. Kann ich in IB etwas tun? Vielleicht sehe ich es einfach nicht? Es scheint trivial, aber ich kann es nicht finden.


Ich erinnere mich, dass Peter Ammon in WWDC'12 über "Verlassen Sie sich so oft wie möglich auf Interface Builder" sprach. Wie ironisch.
DemoniacDeath

4
Ja, ich denke, bei der Implementierung von Layoutbeschränkungen fehlen noch einige Dinge. Es scheint, dass sie uns Zugriff auf die meisten Parameter gewährt haben, aber nicht auf den Multiplikator, der für viele Dinge nützlich wäre.
Rdelmar

Aber es wird immer besser! Ich meine, Auto Layout wurde vor weniger als 3 Jahren eingeführt und aus meiner Sicht ist die Unterstützung heutzutage wirklich gut.
Lukas Kubanek

Antworten:


187

Aktualisieren Sie Xcode 5.1b5

Breite entspricht Höhe

Strg + Klicken und Ziehen aus einer Ansicht und Loslassen, während sich der Zeiger über der Ansicht befindet. Wählen Sie "Seitenverhältnis". Es wird eine Einschränkung erstellt, bei der das erste und zweite Element die Ansicht ist.


Vor Xcode 5.1

Dies ist nicht möglich, da dem Breiten- / Höheneditor die Felder fehlen, um sich auf eine andere Eigenschaft zu beziehen oder das Verhältnis festzulegen:

Breitenbeschränkung

Daher können Sie den folgenden Code in Interface Builder nicht ausdrücken:

CGFloat ratio = 1.0;
NSLayoutConstraint *constraint = [NSLayoutConstraint
    constraintWithItem:myView
    attribute:NSLayoutAttributeWidth
    relatedBy:NSLayoutRelationEqual
    toItem:myView
    attribute:NSLayoutAttributeHeight
    multiplier:ratio
    constant:0];
constraint.priority = 1000;
[myView.superview addConstraint:constraint];

1
Danke für das neueste Update. Mit Xcode 5.1 Beta 5 können Sie tatsächlich Seitenverhältnisbeschränkungen in IB festlegen. Wenn ich jedoch versuche, das Projekt zu kompilieren, wird folgende Fehlermeldung angezeigt : Seitenverhältnisbeschränkungen mit Xcode-Versionen vor 5.1 . Vielleicht müssen wir also auf die endgültige 5.1-Version warten. Das Gleiche gilt für dich, @Jano?
Lukas Kubanek

Ja, die Änderungen an den XIBs sind nicht abwärtskompatibel. Wenn Sie mit 5.1 bearbeiten, können Sie nicht zu kleineren Versionen zurückkehren.
Jano

Sie können also die xib kompilieren? Es funktioniert nicht einmal mit Xcode 5.1 Beta 5 für mich.
Lukas Kubanek

1
@ onmyway133 Erstellen Sie eine Einschränkung zwischen den beiden Ansichten und setzen Sie den Multiplikator auf 1: 2.
Jano

3
In Xcode 7, Strg + Klick ziehen aus der Ansicht und loslassen über sich selbst, und wählen Sie Seitenverhältnis
inorganik

1

Fügen Sie dem UI-Element wie im Bild eine neue Einschränkung mit einem Seitenverhältnis von 1: 1 hinzu.

Stellen Sie das Seitenverhältnis auf 1: 1 ein


0

Zu Beginn steuern Sie das Ziehen diagonal von der Schaltfläche zu sich selbst. Ein Kontextmenü wird angezeigt, in dem Sie Einschränkungen für Breite und Höhe hinzufügen können. Umschalt + Klicken Sie jeweils auf; Ein Häkchen zeigt an, dass Sie die Einschränkung hinzugefügt haben. (Wenn Sie den Dialog versehentlich schließen, bevor Sie beide hinzufügen, ist das in Ordnung. Wiederholen Sie einfach den Ziehschritt und stellen Sie den anderen ein.)

Geben Sie hier die Bildbeschreibung ein

Beim ersten Hinzufügen nehmen diese Einschränkungen die aktuelle Breite und Höhe der Schaltfläche an. Sie müssen daher jede Einschränkung anpassen, um einen angemesseneren Wert zu erhalten. Wir müssen dies einzeln tun, obwohl unser Bild quadratisch ist. Verwenden Sie daher in beiden Einschränkungen denselben konstanten Wert, um die Größe der Schaltfläche proportional zu ändern. Doppelklicken Sie auf die Einschränkung und geben Sie einen kleineren Wert in das Konstantenfeld ein:

Geben Sie hier die Bildbeschreibung ein

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.