Мы используем Xcenter
и Ycenter
NSLayoutConstraint
для позиционирования subview
внутри родителя superview
.Поскольку нам нужно сохранять пропорциональную позицию, мы не можем использовать значение constant
ограничений для ее позиционирования, оно должно основываться исключительно на множителе.
subview
может быть позицией внеиз superview
границ, так что нужен отрицательный множитель.Дело в том, что когда мы применяем отрицательный множитель (через код), позиция подпредставления перемещается неожиданным образом.Использование формулы автоматического макета кажется возможным, но на практике это не так.Вот визуализация:
После установки ограничений ширины / высоты я устанавливаю X и Y, например, так:
let xAnchor = NSLayoutConstraint(item: self, attribute: .centerX, relatedBy: .equal, toItem: superview, attribute: .centerX, multiplier: multpliers.x, constant: 0)
xAnchor.isActive = true
let yAnchor = NSLayoutConstraint(item: self, attribute: .centerY, relatedBy: .equal, toItem: superview, attribute: .centerY, multiplier: multpliers.y, constant: 0)
yAnchor.isActive = true
Только когда множитель отрицательный, мы получаем неожиданные результаты.
У кого-нибудь есть подсказка, что происходит с отрицательными множителями?Мы застряли на этом в течение нескольких старых добрых дней ...