Подтвердить что ты не робот

Ограничение автоматической компоновки: как сделать вид поддерживает соотношение ширины и высоты при изменении размера?

В построителе интерфейса мы можем выровнять высоту, ширину буфера, сделать ширину двух видов равной, но как установить ограничения, чтобы при изменении размера представления он поддерживал соотношение ширины/высоты?

В моем конкретном случае у меня есть UIImageView в моем контроллере. Когда размер представления изменится, я бы хотел, чтобы изображение менялось, но поддерживайте соотношение ширины и высоты 3: 2. Можно ли это сделать в IB? Можно ли это сделать с кодом?

Спасибо!

4b9b3361

Ответ 1

Вы можете добавить ограничение соотношения сторон в IB путем перетаскивания элемента управления из представления в себя и выбора соотношения сторон.

Ответ 2

Я не думаю, что вы можете сделать это в IB, но в коде это можно сделать так (iv - это выход к представлению изображения):

    [self.iv removeConstraints:self.iv.constraints];
    NSLayoutConstraint *con1 = [NSLayoutConstraint constraintWithItem:self.iv attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1  constant:100];
    NSLayoutConstraint *con2 = [NSLayoutConstraint constraintWithItem:self.iv attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.iv attribute:NSLayoutAttributeWidth multiplier:.66 constant:0];
    [self.iv addConstraints:@[con1,con2]];

Это явно устанавливает высоту в 100, а отношение ширины к высоте равно 3: 2.

Ответ 3

Это руководство от Apple действительно помогло мне - в нем изложены два подхода, в которых вы отключите AutoLayout для определенных подзонов и установите кадры напрямую, а другой, где вы используете чистый AutoLayout через код.

https://developer.apple.com/library/ios/technotes/tn2154/_index.html