Mam prosty poziomy UIStackView
z kilkoma UIViews ułożone w stos. Moim celem jest stworzenie zmiennego odstępu między widokami. Doskonale zdaję sobie sprawę z tego, że mogę tworzyć stałą przestrzeń między subspekcjami za pomocą właściwości "spacing". Jednak moim celem jest stworzenie zmiennej przestrzeni. Proszę zwrócić uwagę, jeśli to w ogóle możliwe, chciałbym unikać używania niewidocznych widoków, które działają jako elementy dystansowe.Jak utworzyć UIStackView ze zmiennymi odstępami między widokami?
Najlepsze, co wymyśliłem, to zawrzeć moje UIViews w oddzielnym UIStackView i użyć layoutMarginsRelativeArrangement = YES, aby uszanować marginesy układu mojego wewnętrznego stosu. Miałem nadzieję, że mogę zrobić coś podobnego z dowolnym UIView bez uciekania się do tego brzydkiego obejścia. Oto mój przykładowy kod:
// 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];
Wynik jest stos z widokiem tuż obok siebie, z odstępem:
Dzięki, ale miałem nadzieję, że nie będę musiał uciekać się do pustych widoków, aby dodać miejsca lub wrócić do automatycznego układu. Chociaż jeśli UIStackView nie obsługuje mojego przypadku użycia, być może i tak będę musiał. – yura
Dlaczego chcesz, aby odstępy były zmienne? Możesz mieć zmienne odstępy, jeśli używasz "dystrybucji" "równego centrowania". Spowoduje to, że centra będą miały szerokość równą szerokości, ale odstępy będą się różnić. Wyjaśnij więcej o swoim przypadku użycia. –
Zasadniczo mam kilka widoków, które muszę rozpowszechniać poziomo (lub pionowo) z góry określonej przestrzeni między widokami, które mogą ale nie muszą być tej samej wartości. Chcę móc określić te marginesy za pomocą layoutMargins lub innego mechanizmu. – yura