Как создать процент от общей ширины с помощью автозапуска?

Мне нужно создать три динамических столбца, каждый с фиксированным процентом от общей ширины. Не треть, а разные значения. Например, на следующем рисунке показаны три столбца: первый из которых имеет ширину 42%, второй - 25% ширины, а третий - 33%.

Для монитора с разрешением 600 пикселов это будет 252, 150 и 198 пикселей соответственно.

Однако для любых последующих размеров дисплея (например, для iPhone 4 (960 широкоформатный) или для iPad 2 (ширина 768), я хотел бы, чтобы относительные проценты были одинаковыми (а не ширины пикселей, приведенные выше).

Есть ли способ сделать это с помощью раскадровки (т.е. без кода)? Я могу сделать это легко в коде, но моя цель - максимально использовать эту логику отображения в раскадровке.

enter image description here

Ответ 1

Если, как вы говорите, вы знаете, как это сделать в коде, то вы уже знаете, как это сделать в раскадровке. Это точно те же ограничения, но вы создаете их визуально, а не в коде.

  • Выберите и представление, и его супервизор.

  • Выберите "Редактор" → "Pin" → "Widths". Чтобы ограничить ширину, равную ширине супервизора (на самом деле здесь лучше всего появляется всплывающее диалоговое окно "pin" внизу холста).

  • Измените ограничение и установите множитель в нужную фракцию, например. 0,42. И так же для других взглядов.

Одна картина стоит тысячи слов, я внедрил предложенный вами макет для раскадровки без использования кода в проекте github, который вы можете скачать и изучить:

https://github.com/mattneub/percentageWidthsInStoryboard

Ответ 2

Я думаю, что это можно объяснить более подробно, поэтому его можно более легко применить к любому количеству представлений, требующих фиксированных процентных макетов внутри супервизора.

Левый вид

  • привязано к SuperView.Leading
  • Определяет свой фиксированный процент как множитель на SuperView.Height

Промежуточные виды

  • Определяет свой фиксированный процент как множитель на SuperView.Height
  • Соединяет его left со своим соседством.

Вид справа -

  • Не определяет фиксированный процент (это остальная часть доступного представления)
  • Соединяет его left со своим соседством.
  • Отключает right до SuperView.Trailing

Все представления

  • Определите их нефиксированные высоты, привязав их к Top Layout Guide.Top и Top Layout Guide.bottom. В ответе выше отметим, что это также можно сделать, установив равную высоту соседнему виду.