#ios #xcode-storyboard #ios-autolayout
#iOS #xcode-раскадровка #ios-автозапуск
Вопрос:
В настоящее время у меня возникают трудности с автозапуском. Я использую interface builder и пытаюсь разместить два блока uiview размером 100 * 100. Мне нужны эти блоки, размещенные таким образом, чтобы 1-й блок, ведущий к супервизору, равнялся 2-му блоку, ведущему к супервизору.Далее это равно пространству между этими двумя блоками и одинаково изменяется в зависимости от ширины экрана. Я пытался использовать stackview, который дает фиксированную ширину для stackview, кажется, одинаково разнесен на 4s, но не на 6s.Сохранение ширины не фиксированной приводит к большему расстоянию между блоками, как здесь .
Возможно ли добиться этого с помощью Interface builder? Большое спасибо за любую помощь.
Комментарии:
1. Должны ли изменяться высота и ширина представлений внутри stackview или они должны оставаться фиксированными на некоторых заранее определенных значениях?
2. Да, ширина и высота этого блока постоянны 100 от 4s до 6s plus. Для ipad это значение должно быть изменено на 150.
Ответ №1:
IB не очень изящно справляется с этим. Самое сложное решение — добавить «разделительные» виды (виды, которые мы добавим для разделения в автозапуске, но которые будут невидимыми). Просто сделайте ширину разделительных видов равной, а затем либо поместите эти пять видов в стековый вид, либо просто установите горизонтальные ограничения, чтобы пять видов примыкали друг к другу:
Затем просто установите для фона разделительных видов чистый цвет, чтобы мы их не видели, и у вас будет нужный интервал:
Если вы делаете это программно (чего, я знаю, вы не делаете, но просто для полноты картины), вы бы использовали UILayoutGuide
вместо этих невидимых разделительных представлений:
let view1 = ...
let view2 = ...
let layout1 = UILayoutGuide()
view.addLayoutGuide(layout1)
let layout2 = UILayoutGuide()
view.addLayoutGuide(layout2)
let layout3 = UILayoutGuide()
view.addLayoutGuide(layout3)
let views: [String: Any] = ["view1": view1, "view2": view2, "layout1": layout1, "layout2": layout2, "layout3": layout3]
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[layout1][view1(==100)][layout2(==layout1)][view2(==100)][layout3(==layout1)]|", options: .alignAllCenterX, metrics: nil, views: views))
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-[view1(==100)]", options: [], metrics: nil, views: views))
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-[view2(==100)]", options: [], metrics: nil, views: views))
Несколько удивительно, что Apple до сих пор не добавила руководства по компоновке в IB.
Комментарии:
1. Большое спасибо, Роб. Я использовал решение для просмотра с разделителем.