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

Изображение UIImageView растянуто, хотя contentMode = UIViewContentModeScaleAspectFit

Я действительно разочарован тем, как 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

4b9b3361

Ответ 1

Настройка размера должна произойти ПОСЛЕ установки contentMode

[imageView setContentMode: UIViewContentModeScaleAspectFit];
imageView.frame = CGRectMake(x, y, width, height);

Ответ 2

У меня была та же проблема. В моем проекте 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 с самого начала.

Ответ 3

Я просто запустил его, и ваш код работает нормально. Это может быть связано с тем, что вы указываете JPG, когда на самом деле это png?

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

Ответ 4

Это глупо, настолько глупо, что я горжусь этим. Итог: я оказался на этом SO post mind contentMode = UIViewContentModeScaleAspectFit был сломан, когда на самом деле то, что было действительно сломано, было моим ожиданием результата. Я работал с квадратным изображением на квадратном изображении, поэтому Fit и Fill имели тот же эффект. Я плакал, как ребенок, когда я не мог заставить его сидеть широкоэкранно внутри квадрата.

Ответ 5

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

[ОБНОВЛЕНИЕ]

"Размерные ограничения" - это размер, который делает размер относительно другого вида.

Xamarin IOS Doc