Ich versuche zu verstehen, wie man Auto Layout verwenden kann, um Elemente relativ zu anderen Ansichten prozentual zu positionieren.Verstehen Multiplikator in Auto-Layout, um relative Positionierung zu verwenden
Zum Beispiel habe ich vor kurzem erfahren, dass Sie die Ansicht einer Unterseite angeben sollen 4% höher liegen als Boden seiner Superview ist durch diese Verwendung:
self.view.addConstraint(NSLayoutConstraint(item: label, attribute: .Bottom, relatedBy: .Equal, toItem: self.view, attribute: .Bottom, multiplier: 0.96, constant: 0))
Dies macht Sinn für mich, weil ein Multiplikator von 1 ausrichten würde direkt am unteren Rand der Ansicht, so dass Sie diesen Betrag um 4 Prozent verringern können, indem Sie den Multiplikator auf 0,96 ändern.
Aber wie können Sie das gleiche in die andere Richtung tun? Sie möchten angeben, dass der obere Rand eines Labels 4% unterhalb des oberen Bereichs der Superansicht beginnen soll. Wenn Sie die gleiche Zeile verwenden, aber die Attribute in ändern, bedeutet das, dass sie 4% höher als die der Superview ist (aber sie wird nicht vom Bildschirm entfernt). Sie können keinen negativen Multiplikator haben, den ich nicht denke, und ich glaube nicht, dass ein Wert größer als 1 irgendetwas tut, wenn Konstante 0 ist. Wie bekommen Sie das?
Ich habe die gleiche Frage für die Implementierung von führenden und nachlaufenden. Trailing ist einfach. Wenn Sie es 10% vom rechten wollen:
self.view.addConstraint(NSLayoutConstraint(item: label, attribute: .Trailing, relatedBy: .Equal, toItem: self.view, attribute: .Trailing, multiplier: 0.9, constant: 0))
Es macht Sinn, weil Sie sie wählen zurück 0,1 oder 10% statt voll bei 1,0 auszurichten. Aber wie machst du das gleiche für die Führung? Ich dachte, dass Sie möglicherweise den führenden Relativwert der Beschriftung zu dem Nachlauf der Ansicht festlegen können, und legen Sie dann den Multiplikator auf 0,1 fest. In meinen Augen würde das bedeuten, dass das Label ganz rechts beginnen würde, aber dann wieder 90% gewählt werden würde, um die gewünschten 10% von links zu bekommen. Aber das ist nicht der Fall, ich bin mir nicht sicher warum.
Können Sie erklären, wie dies funktioniert, wie Sie den Multiplikator richtig verwenden, um diese relativen Layouts zu erhalten?
Um es einfach zu machen, sagen wir, Sie möchten ein Label erstellen, das oben und unten 10% der Superview-Höhe und 10% der Superview-Breite hat. Auf einem iPhone im Portrait, es geht um mehr Polsterung über und unter dem Etikett zu sein, als es Polsterung nach links und rechts davon ist, wie so (ja es maßstäblich ist gezeichnet):
Aber lassen Sie sich auf dem iPad sagen es wird in einer Ansicht gezeigt, die ein perfektes Quadrat ist. Daher wird die Polsterung überall gleich groß sein:
Die Frage ist, wie definieren Sie solche Einschränkungen als dynamisch im Wert, im Gegensatz zum Festlegen eines festen Werts für eine Konstante. Ich weiß bereits, wie man den Boden und den Trail macht, aber Spitze und Vorsprung haben mich ratlos gemacht. Ich hoffe zu verstehen, wie man den Multiplikator benutzt, um komplexere Layouts zu erstellen, zum Beispiel, dass die Oberkante eines Labels 10% unter der Unterseite eines anderen Labels liegen sollte, anstatt es auf eine feste Konstante zu setzen.
Können Sie zeigen ein Diagramm von dem, was Sie erreichen wollen? – matt
Für diese sehr alte QA .. ist der grundlegende Ansatz, "Abstandhalter" oder "Mess" Ansichten zu verwenden. Markieren Sie sie einfach als versteckt. Sie machen alle Berechnungen für Sie. – Fattie