2016-12-19 1 views
1

У меня проблема с множителем и не могу понять, как работает эта функция. Например, у меня есть представление с множителем 6: 1 (для SuperView.Leading), как показано ниже.AutoLayout Understanding Multiplier

SuperView.Leading with 6:1 multiplier picture Когда я меняю множитель на 2: 1, это выглядит как снизу.

enter image description here Мой вопрос в отношении 6: 1, что означает 6 и 1. А также в соотношении 2: 1, что означает 2 и 1. Аналогично, у вас есть три вида, как на картинке ниже. Всего есть 4 пустые области между подвидными и супервиками. Как я могу сказать, что каждая пустая область должна быть SuperView.Width/6 (и каждая ширина заготовки должна быть одинаковой) enter image description here

Заранее спасибо.

+0

для лучшего понимания используйте 0,5 непосредственно вместо 1: 2 – AnshaD

+1

Если вы проверите яблочный документ, есть все детали свойств автоопределения ... вам нужно проверить, что сначала –

ответ

2

При работе с автозагрузкой, особенно когда вы работаете с пропорциональными макетами, вам необходимо использовать множитель.

Я должен объяснить здесь некоторую математику. Мы знаем уравнение звездной линии.

Y = Mx + С

В приведенном выше уравнении. Предположим, что M - ваш множитель, а C - ваша константа.

Таким образом, предположим, что у вас есть супервизор (в случае iphone 6s plus) от 414 (ширина) x 736 (высота). С этой точки зрения предположим, что вы создали subview.

Теперь, если вы хотите, чтобы размер подзадача был в точности превышен размером супервизора, просто перетащите два ограничения из subview в супервизор. (Т.е. одинаковой ширины и одинаковой высоты)

Смотрите эту картинку

enter image description here

Очевидно, теперь вы получите сообщение об ошибке. как и я. (Смотрите рисунок ниже)

enter image description here

Теперь нажмите на обоих ограничений по одному, и использовать множитель 0,5. Затем используйте уравнение прямой линии. Здесь 0.5 означает, что вы хотите ширину subview = superviewWidth/2.0, то есть 212 px.

Другими словами, вы можете предоставить множитель как 212: 414.

Y т.е. subviewWidth = ((M т.е. 0,5) * (х е 414 т superviewWidth)) + (Constant т.е. Zero)

Наконец вы получите subviewWidth = 212 точек

Аналогично сделать для высоты подвид , Укажите множитель 0.5 или 368: 736.

Когда все будет сделано, не забудьте щелкнуть мышью на субвью и обновить фреймы.

В этом случае константы и множитель будут работать.

1

В моем примере множителя 1: 2 = 0,5

высота красный вид 0,5 раза больше, чем надтаблицы

enter image description here

2

мультипликатор есть для создания Пропорциональный Constraint. Auto Layout вычисляет атрибут первого элемента как продукт second item’s attribute and this multiplier. Любое значение, отличное от 1, создает пропорциональное ограничение.

В вашем случае, 6: 1 означает, что множитель 6/1 = 6. Это означает

view.leading = Superview.leadingMargin*6 

заменить : с / - вы поймете, что это значит.

1

Когда дело доходит до множителя, это зависит от того, с какими ограничениями вы имеете дело. У вас есть ограничения, связанные с представлениями, связанные с ведущим полем контроля. Когда константа равна 0, это дает вам 8-кратный зазор. Когда вы меняете множитель, вы будете использовать этот пробел. Вот почему, когда вы делаете 2: 1, вы видите, что он идет вправо на 8 очков. По существу умножая исходный 8-ти точечный зазор на 2. Если вы сделаете 1: 2, он будет идти от 8 пунктов до 4 пунктов, по существу деля исходный 8-балльный запас на 2.

Теперь, когда вы смотрите на пример Адриана, он только умножил его на 1: 2, так как это сделало его половиной всего экрана? Это потому, что он сделал это по ограничению высоты. Первоначально вид был полным размером супервизора, но когда он умножил его на 1: 2, он указал, что хочет, чтобы он составлял половину его первоначальной высоты. Даю вам этот конечный результат.

Итак, важно понять, что мультипликатор может действовать по-разному в зависимости от ситуации, но это потому, что это зависит от того, с какими ограничениями вы сталкиваетесь.

вот хороший ответ, который идет в это больше: Understanding multiplier in auto layout to use relative positioning

детали ссылку, как если бы вы хотели, чтобы сделать переднюю кромку 10% и заднюю кромку 90% вы должны установить оба ограничения в отношении задний край.

Умножение конечного ограничения на 0,9 и основные ограничения на 0,1.

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

 Смежные вопросы

  • Нет связанных вопросов^_^