АвтоЗапуск не изменяет размер должным образом

#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.