Sie sagten:
Ich habe zwei Ansichten, die ich so platzieren möchte, dass sie horizontal gleichmäßig verteilt sind.
Ich möchte ihr Center X so definieren, dass sie die dritte und zwei Drittel der Breite der Superview sind, aber ich habe keine Einschränkung gefunden, die Ihnen erlaubt, dies zu tun.
Es ist erwähnenswert, dass "gleichmäßig verteilt" und "Center x das ist und ⅔ der Superview" nicht wirklich dasselbe sind. Betrachten Sie das Szenario "⅓ und ⅔": Stellen Sie sich eine Superansicht mit einer Breite von 300 Pixeln vor, die die Punkte ⅓ und at auf 100 bzw. 200 setzen würde. Wenn Sie dann zwei Teilansichten mit einer Breite von 50 Pixeln hinzufügen, beträgt der linke und rechte Rand jeweils 75 Pixel, der mittlere Rand jedoch 50 Pixel. Wenn die Untersichten breiter sind, wird es schlechter (z. B. wenn die Untersichten 100 Pixel breit sind, würde es 50 Pixel-Ränder links und rechts geben, aber absolut keinen Zwischenraum dazwischen).
Wenn Sie sie wirklich gleichmäßig verteilen möchten (wobei der horizontale Abstand zwischen den Untersichten mit dem Abstand zwischen den Untersichten und den Kanten ihrer Superansicht übereinstimmt), können Sie Layout-Hilfslinien verwenden, wenn dies programmgesteuert geschieht.
Also, vorausgesetzt Sie bereits zwei Subviews erstellt haben und haben von ihrer Größe und vertikalen Beschränkungen gesorgt hat, können Sie tun:
// create three layout guides
let layoutGuides = (0 ..< 3).map { _ in UILayoutGuide() }
// add them to your view
layoutGuides.forEach { view.addLayoutGuide($0) }
// create dictionary for VFL
let views = ["layoutGuide0": layoutGuides[0], "layoutGuide1": layoutGuides[1], "layoutGuide2": layoutGuides[2], "subview0": subviews[0], "subview1": subviews[1]]
// define horizontal constraints where three layout guides are the same width
let vfl = "H:|[layoutGuide0][subview0][layoutGuide1(==layoutGuide0)][subview1][layoutGuide2(==layoutGuide0)]|"
let constraints = NSLayoutConstraint.constraints(withVisualFormat: vfl, metrics: nil, views: views)
NSLayoutConstraint.activate(constraints)
Wenn Sie dies in IB tun wollen, können Sie nicht Erstellen Sie diese Art von Layout-Hilfslinien, aber Sie können drei unsichtbare "Spacer" -Ansichten (dh einfache UIView
Objekte mit Alpha von 0) mit Zwangsbedingungen hinzufügen, die ihre jeweiligen Breiten gleich halten.Dann kleben Sie diese fünf Ansichten (die zwei Teilansichten plus die drei Spacer-Ansichten) in der Stapelansicht (oder, wenn Sie ein Masochist sind, umgehen Sie die Stapelansicht und fügen Sie die sechs führenden/nachlaufenden Einschränkungen zwischen diesen fünf Teilansichten hinzu) und Sie erreichen das gewünschte Effekt von zwei gleichmäßigen Unteransichten (zwischen diesen drei nicht sichtbaren "Spacer" -Ansichten).
Also, das ist, wie es aussieht (was die drei „Spacer“ Ansichten sichtbar, so dass Sie sehen können, was los ist):
Der Netto-Effekt, wenn man diese drei Distanz Ansichten geben ein alpha
von 0 (für sie unsichtbar zu machen) ist wie folgt:
Muss ich liebe diese Skizze: D – LinusGeffarth