Я пытаюсь понять, как можно использовать Auto Layout для позиционирования элементов относительно других представлений в процентах.
Например, я недавно узнал, что вы можете указать, что нижняя часть представления должна лежать на 4% выше, чем нижняя часть его суперпредставления, используя это:
self.view.addConstraint(NSLayoutConstraint(item: label, attribute: .Bottom, relatedBy: .Equal, toItem: self.view, attribute: .Bottom, multiplier: 0.96, constant: 0))
Для меня это имеет смысл, потому что множитель, равный 1, выровняет его прямо в нижней части представления, поэтому вы можете уменьшить это количество на 4 процента, изменив множитель на 0,96.
Но как сделать то же самое в другом направлении? Вы хотите указать, что верхняя часть метки должна начинаться на 4% ниже верхней части супервизора. Если вы используете ту же самую строку, но измените атрибуты на .Top
, это означает, что она будет на 4% выше верхней части суперпредставления (но на самом деле она не перемещается за пределы экрана). Я не думаю, что у вас может быть отрицательный множитель, и я не верю, что значение больше 1 что-то делает, когда константа равна 0. Итак, как вам это настроить?
У меня тот же вопрос для реализации ведущего и трейлинга. Следить легко. Если вы хотите, чтобы это было на 10% справа:
self.view.addConstraint(NSLayoutConstraint(item: label, attribute: .Trailing, relatedBy: .Equal, toItem: self.view, attribute: .Trailing, multiplier: 0.9, constant: 0))
Это имеет смысл, потому что вы набираете его обратно на 0,1 или 10% вместо полного выравнивания на 1,0. Но как сделать то же самое для лидерства? Я подумал, что вы могли бы установить начало метки относительно конца представления, а затем установить множитель на 0,1. На мой взгляд, это означало бы, что метка будет начинаться в самом крайнем правом углу, но затем будет набираться назад на 90%, таким образом, получая желаемые 10% слева. Но это не так, я не уверен, почему.
Можете ли вы объяснить, как это работает, как правильно использовать множитель для получения этих относительных макетов?
Чтобы упростить задачу, предположим, что вы хотите создать метку, которая имеет верхние и нижние 10% высоты суперпредставления, а также 10% ширины суперпредставления в конце и в начале. На iPhone в портретной ориентации будет больше отступов над и под меткой, чем отступов слева и справа от нее, например (да, они нарисованы в масштабе):
Но скажем, на iPad оно будет отображаться в виде идеального квадрата. Таким образом, отступы будут одинаковыми по всему периметру, например:
Вопрос заключается в том, как определить динамические значения таких ограничений, а не устанавливать фиксированное значение для константы. Я уже знаю, как делать низ и отставание, но верх и ведущее положение поставили меня в тупик. Я надеюсь понять, как использовать множитель для создания более сложных макетов, например, указание верхней части метки должно лежать на 10% ниже нижней части другой метки, а не установка фиксированной константы.