Как разместить дочернее представление относительно размера представления?
Я хочу, чтобы мой ребенок мог разместить 25% размера супер-представления сверху.
NSLayoutConstraint *topPositionConstraint = [NSLayoutConstraint constraintWithItem:_containerView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:_childView
attribute:NSLayoutAttributeHeight
multiplier:0.25f
constant:0.0f];
Однако сейчас я получаю следующее исключение:
'NSInvalidArgumentException', reason: '*** +[NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:]: Invalid pairing of layout attributes'
Почему возникает ошибка и как я могу достичь того, что хочу?
Ответы
Ответ 1
Вы не можете использовать верх и высоту в одном и том же ограничении. Хотя имеет смысл сказать, что системе это не нравится.
Вместо этого вы можете сделать что-то вроде...
NSLayoutConstraint *topPositionConstraint =
[NSLayoutConstraint constraintWithItem:_childView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:_containerView
attribute:NSLayoutAttributeTop
multiplier:1.0
constant:_containerView.frame.size.height * 0.25];
Ответ 2
Вместо использования фрейма, как в принятом ответе, вы можете переместить процент на множитель, если используете нижнюю, а не высоту. Я использую эту технику для определения местоположения детей в процентах. Это также хорошо, потому что рамка вашего представления контейнера не может быть установлена, когда вы создаете ограничение:
NSLayoutConstraint *topPositionConstraint =
[NSLayoutConstraint constraintWithItem:_childView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:_containerView
attribute:NSLayoutAttributeBottom
multiplier:0.25
constant:0];