#ios #swift #xcode #autolayout #storyboard
Вопрос:
Я пытаюсь понять, как сделать так, чтобы мои три кнопки в стеке имели относительный размер и сохраняли одинаковое расстояние между множителями на разных устройствах, например, кнопки будут больше, если я нахожусь на ipad по сравнению с iphone. Во-вторых, расстояние между левым и правым краями кнопок на ipad будет больше, чем на устройстве iphone. До сих пор у меня в настоящее время есть три кнопки в стеке. Я добавил горизонтальное и вертикальное выравнивание в свой stackview. Я поиграл с добавлением равных высот и ширины и изменил множитель, а также добавил ограничения к кнопкам, однако это не дало желаемого результата. Вот скриншот того, как я хотел бы, чтобы мои товары размещались на всех устройствах:
Ответ №1:
UIStackView
имеет только статический интервал. У вас есть два варианта:
- Измените интервал внутри кода с
viewWillLayoutSubviews
помощью . Я предпочитаю этоviewDidLayoutSubviews
, потому что изменения будут следовать за анимацией вращения. Но если ваши расчеты будут зависеть от других подвидов(не толькоself.view
), эти кадры еще не будут обновлены. Ты тоже можешьconstraint.constant
так измениться.
@IBOutlet var stackView: UIStackView!
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
stackView.spacing = view.bounds.height * 0.05
}
- Используя только раскадровку, вы не можете добавить ограничение расстояния с помощью модификатора. Но вы можете добавить прозрачный вид, который будет вашим разделителем, и применить к нему модификатор ширины/высоты. Это можно использовать как для
UIStackView
простых представлений, так и для простых представлений.
Я предпочитаю добавлять ограничение равной высоты для всех видов с одинаковым размером(например btn1.height = btn2.height, btn1.height = btn3.height
), поэтому я могу установить размер с одним ограничением для всех из них( btn1.height = superview.height * 0.1
).
Что — то подобное должно сработать для вашего:
Результат: