Ответ 1
Настройка размера должна произойти ПОСЛЕ установки contentMode
[imageView setContentMode: UIViewContentModeScaleAspectFit];
imageView.frame = CGRectMake(x, y, width, height);
Я действительно разочарован тем, как UIImageView отображает изображение.
У меня есть следующий код:
UIImageView *imgview = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 300, 100)];
imgview.image = [UIImage imageNamed:@"img.JPG"];
imgview.backgroundColor = [UIColor greenColor];
imgview.contentMode = UIViewContentModeScaleAspectFit;
[self.view addSubview:imgview];
Я получаю следующий снимок экрана:
http://img26.imageshack.us/img26/3686/screenshot20130123at629.png
[изображение растягивается до полной ширины UIImageView и даже не достигает полной высоты)
Исходное изображение:
http://img248.imageshack.us/img248/341/screenshot20130123at638.png
Настройка размера должна произойти ПОСЛЕ установки contentMode
[imageView setContentMode: UIViewContentModeScaleAspectFit];
imageView.frame = CGRectMake(x, y, width, height);
У меня была та же проблема. В моем проекте UIImage
, созданный с помощью imageWithCIImage:
, никогда не соблюдал contentMode
UIImageView
, в который он был вставлен.
Некоторые изображения также имеют странные атрибуты, которые вызывают одну и ту же проблему. Преобразование его в PNG с помощью Photoshop всегда работало над ними.
Не, работающий с contentMode
:
CIImage * __strong ciImage = [CIImage imageWithContentsOfURL:url];
_image = [UIImage imageWithCIImage:ciImage];
UIImageView
, по-видимому, изменяет размер на основе CGImage
.
Вам нужно отобразить CIImage в CGImage и использовать его как UIImage. Это будет работать с UIViewContentModeAspectFit
.
Используйте, например, createCGImage:fromRect:
, или лучше используйте CGImage
с самого начала.
Я просто запустил его, и ваш код работает нормально. Это может быть связано с тем, что вы указываете JPG, когда на самом деле это png?
Вы также можете использовать UIViewContentModeScaleAspectFill, но убедитесь, что ваши ограничения находятся в пределах представления, потому что в противном случае внешняя сторона может быть обрезана
Это глупо, настолько глупо, что я горжусь этим. Итог: я оказался на этом SO post mind contentMode = UIViewContentModeScaleAspectFit был сломан, когда на самом деле то, что было действительно сломано, было моим ожиданием результата. Я работал с квадратным изображением на квадратном изображении, поэтому Fit и Fill имели тот же эффект. Я плакал, как ребенок, когда я не мог заставить его сидеть широкоэкранно внутри квадрата.
В моем случае я решил удалить некоторые ограничения, которые изменяют размер изображения, установленного по ошибке.
[ОБНОВЛЕНИЕ]
"Размерные ограничения" - это размер, который делает размер относительно другого вида.