#ios
#iOS
Вопрос:
Это иерархический
супервизор моего представления
— wrapperview
— дочерний просмотр
— дочерний просмотр
Когда я использую autolayout, я хочу, чтобы все вложенные представления имели ширину, равную superview. Но просто wrapperview равно
Пример:
— В портретном режиме: superview = wrapperview = 768, но дочерние просмотры равны 1024
— В альбомной ориентации: superview = wrapperview = 1024, но дочерний просмотр равен 768
Кто-нибудь знает, что там произошло?
Ответ №1:
Если дочерний вид прикреплен к краям вашего супер-представления, а его содержимое больше, чем супервизор (что, вероятно, в вашем случае), то он вытеснит представление, если вы используете язык визуального форматирования.
Например, предположим, что ваш дочерний вид является UIImageView и имеет изображение размером 1024 x 1024.
Если ваш автоматический макет выглядит примерно так:
[self.wrapperView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[imageView]|" options:0 metrics:nil views:views]];
Тогда ваш ImageView вытеснит wrapperView.
Что вам нужно сделать, так это использовать этот метод ограничений, который немного более явный:
[self.wrapperView addConstraint:[NSLayoutConstraint constraintWithItem:self.childView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.wrapperView attribute:NSLayoutAttributeWidth multiplier:1.0 constant:0.0]];
Это сообщает autolayout, что ширина вашего дочернего представления должна быть равна ширине представления-оболочки и никогда не должна превышать (как указано флагом nslationequal).
Комментарии:
1. Нет, нет ничего больше, чем superview.