Автоматический макет сохраняет растяжение UIImageView
Я использую Auto layout, и это сводит меня с ума. Я сделал все, что мог, чтобы не повредить UIImageView. Я понятия не имею, почему это так. Я попытался использовать ограничения, решая проблемы автоматического макета. На данный момент единственным решением было автоматическое компоновка.
Может ли кто-нибудь сказать мне, почему xcode полностью игнорирует мои ограничения? Я бы ожидал, что UIImage останется 320x320, когда я явно установил его, но noooooooo....
Я хочу размещать изображения, но сайт не позволит мне, и я хотел бы добавить код к этому вопросу, чтобы он был более конкретным, но там буквально никакого кода вообще. Я просто перетащил "UIImageView" из раскадровки, сделал его маленьким, установил ограничения как есть, и он просто игнорировал мой код.
Ответы
Ответ 1
Вы хотите убедиться, что ваш UIImageView
установлен на клип в рамки. Если нет, изображение выйдет из представления и будет казаться, что оно не растягивается правильно (хотя на самом деле это так).
В построителе интерфейсов убедитесь, что флажок Clip Subviews отмечен.
![enter image description here]()
Если вы не используете конструктор интерфейса, следующий код будет делать то же самое:
yourImageView.clipsToBounds = YES;
Ответ 2
При автозапуске значения в инспекторе размеров практически игнорируются.
![Anything you enter here will be ignored]()
Вы можете ожидать, что если число будет введено в поля в Inspector Size, Xcode автоматически создаст ограничения, чтобы отразить то, что вы набрали, но это не так. Вам нужно создать ограничения "Pin" самостоятельно для высоты и ширины вашего UIImageView
.
Когда вы закончите, вы сможете увидеть свои ограничения в Инспекторе размеров в правой части экрана (фиолетовые)
![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];