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

Автоматический макет сохраняет растяжение UIImageView

Я использую Auto layout, и это сводит меня с ума. Я сделал все, что мог, чтобы не повредить UIImageView. Я понятия не имею, почему это так. Я попытался использовать ограничения, решая проблемы автоматического макета. На данный момент единственным решением было автоматическое компоновка.

Может ли кто-нибудь сказать мне, почему xcode полностью игнорирует мои ограничения? Я бы ожидал, что UIImage останется 320x320, когда я явно установил его, но noooooooo....

Я хочу размещать изображения, но сайт не позволит мне, и я хотел бы добавить код к этому вопросу, чтобы он был более конкретным, но там буквально никакого кода вообще. Я просто перетащил "UIImageView" из раскадровки, сделал его маленьким, установил ограничения как есть, и он просто игнорировал мой код.

4b9b3361

Ответ 1

Вы хотите убедиться, что ваш UIImageView установлен на клип в рамки. Если нет, изображение выйдет из представления и будет казаться, что оно не растягивается правильно (хотя на самом деле это так).

В построителе интерфейсов убедитесь, что флажок Clip Subviews отмечен.

enter image description here

Если вы не используете конструктор интерфейса, следующий код будет делать то же самое:

yourImageView.clipsToBounds = YES;

Ответ 2

При автозапуске значения в инспекторе размеров практически игнорируются.

Anything you enter here will be ignored

Вы можете ожидать, что если число будет введено в поля в Inspector Size, Xcode автоматически создаст ограничения, чтобы отразить то, что вы набрали, но это не так. Вам нужно создать ограничения "Pin" самостоятельно для высоты и ширины вашего UIImageView.

  • Выберите вид изображения в раскадровке
  • Нажмите кнопку "Pin" в нижней правой части экрана раскадровки.
  • Введите желаемый размер в поля "Ширина" и "Высота" и убедитесь, что флажки отмечены.
  • Нажмите кнопку "Добавить 2 ограничения"

    enter image description here

Когда вы закончите, вы сможете увидеть свои ограничения в Инспекторе размеров в правой части экрана (фиолетовые)

enter image description here

Ответ 3

Моя проблема была с ContentHuggingPriority и ContentCompressionResistancePriority.

Первый определяет, насколько важно сохранить представление "обнимать" изображение (оставаться рядом с ним и не расширять), а последний определяет, насколько он устойчив к сжатию.

Мы используем PureLayout, поэтому код для исправления был:

[NSLayoutConstraint autoSetPriority:ALLayoutPriorityRequired forConstraints:^{
    [myImageView autoSetContentCompressionResistancePriorityForAxis:ALAxisHorizontal];
    [myImageView autoSetContentHuggingPriorityForAxis:ALAxisHorizontal];
}];

(моя проблема была только в горизонтальной оси)

15 мая 2016: Обновлен до синтаксиса PureLayout v3. Если вы используете версию <= 2, просто поместите UIView вместо NSLayoutConstraint. Спасибо Рудольф J!

Ответ 4

У меня была та же проблема. Я добавил UIImageView в ячейку прототипа и хотел выровнять его рядом с текстом, но он продолжал растягивать изображение, когда я применял ограничения. В моем случае я изменил свойство "Mode" для Image View на "Aspect Fit", и он работал нормально. введите описание изображения здесь

Ответ 5

Вы можете попытаться добавить UIImageView программно. Вызовите этот код в методе viewDidLoad или где хотите.

UIImageView *yourImageView = [[UIImageView alloc]initWithFrame:CGRectMake(50.0f, 50.0f, 320.0f, 320.0f)]; // x and y coordinates, width and height of UIImageView
[yourImageView setImage:[UIImage imageNamed:@"your_image.png"]];
[yourImageView setContentMode:UIViewContentModeCenter]; // you can try use another UIViewContentMode

[self.view addSubview:yourImageView];