Wie kann ich UIStackView mit variablem Abstand zwischen den Ansichten?
Habe ich eine einfache horizontale UIStackView
mit mehreren UIViews gestapelt im inneren. Mein Ziel ist die Schaffung variable Abstände zwischen den Ansichten. Ich bin mir bewusst, dass ich Konstante Abstand zwischen den Untersichten mit "spacing" Eigenschaft. Aber mein Ziel ist, erstellen Sie Variablen Raum. Bitte beachten Sie, wenn irgend möglich, möchte ich vermeiden, mit unsichtbaren Ansichten, dienen als Abstandhalter.
Die besten, die ich kam, war, einzuwickeln meinen UIViews in einem separaten UIStackView, und verwenden Sie layoutMarginsRelativeArrangement = JA zu respektieren, die layout-Ränder von meinem inneren Stapel. Ich hatte gehofft, ich könnte tun, etwas ähnliches mit jedem UIView ohne Rückgriff auf dieses hässliche work-around. Hier ist mein Beispielcode:
//Create stack view
UIStackView *stackView = [[UIStackView alloc] init];
stackView.translatesAutoresizingMaskIntoConstraints = NO;
stackView.axis = UILayoutConstraintAxisHorizontal;
stackView.alignment = UIStackViewAlignmentCenter;
stackView.layoutMarginsRelativeArrangement = YES;
//Create subview
UIView *view1 = [[UIView alloc] init];
view1.translatesAutoresizingMaskIntoConstraints = NO;
//... Add Auto Layout constraints for height /width
//...
//I was hoping the layoutMargins would be respected, but they are not
view1.layoutMargins = UIEdgeInsetsMake(0, 25, 0, 0);
//... Create more subviews
//UIView view2 = [[UIView alloc] init];
//...
//Stack the subviews
[stackView addArrangedSubview:view1];
[stackView addArrangedSubview:view2];
Das Ergebnis ist ein Stapel mit Blick auf die direkt neben einander, mit Abstand:
InformationsquelleAutor der Frage yura | 2015-10-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Update Für iOS 11, StackViews mit Benutzerdefinierten Abstand
Apple hat die Fähigkeit, um benutzerdefinierte Abstand in iOS 11. Sie einfach geben Sie den Abstand nach jedem angeordnet Untersicht. Leider kann man nicht angeben, Abstand vor.
Immer noch weit besser als mit Ihren eigenen Ansichten.
Für iOS 10 und Unten
Können Sie einfach fügen Sie einen transparenten Blick in Ihre stack-Ansicht, und fügen Sie Breite-Einschränkungen zu Ihnen.
(Label - UIView - Label - UIView -Label)
und wenn Sie halten
distribution
zu füllen, dann können Sie die setup-variable Breite-Einschränkungen auf Ihrem UIViews.Aber ich würde überlegen, ob dies die richtige situation zu verwenden stackviews wenn das der Fall ist. Autolayout macht es sehr einfach zu setup-variable breiten zwischen den Ansichten.
InformationsquelleAutor der Antwort Rob Norback