Как создать UIStackView с переменным расстоянием между представлениями?
у меня есть простой горизонтальный UIStackView
с несколькими uiviews, уложенными внутри. Моя цель-создать переменный интервал между представлениями. Я хорошо знаю, что могу создать постоянное пространство между подвидами, используя свойство "spacing". Однако моя цель-создать переменное пространство. Обратите внимание, если это возможно, я хотел бы избежать использования невидимых видов, которые действуют как распорки.
лучшее, что я придумал, - это обернуть мои UIViews в отдельный UIStackView и использовать layoutMarginsRelativeArrangement = да, чтобы уважать поля макета моего внутреннего стека. Я надеялся, что смогу сделать что-то подобное с любым UIView, не прибегая к этой уродливой работе. Вот мой пример кода:
// 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];
результатом является стек с представлениями рядом друг с другом с интервалом:
1 ответов
обновление для iOS 11, StackViews с пользовательским интервалом
Apple добавила возможность устанавливать пользовательские интервалы в iOS 11. Вам просто нужно указать интервал после каждого упорядоченного подвида. К сожалению, вы не можете указать интервал перед.
stackView.setCustomSpacing(10.0, after: firstLabel)
stackView.setCustomSpacing(10.0, after: secondLabel)
все же лучше, чем использовать свои собственные представления.
для iOS 10 и ниже
вы можете просто добавить прозрачные представления в свой вид стека и добавить ширину ограничения для них.
(Метка - UIView - Метка - UIView-Метка)
и если ты продолжишь distribution
чтобы заполнить, вы можете настроить ограничения переменной ширины для ваших UIViews.
но я бы рассмотрел, является ли это правильной ситуацией для использования stackviews, если это так. Autolayout делает его очень легким установить переменные ширины между взглядами.