Изображение 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

5 ответов

Установка размера должна произойти ПОСЛЕ установки 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, но убедитесь, что ваши границы находятся в пределах предела представления, потому что в противном случае внешняя сторона может быть обрезана

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

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

[ОБНОВИТЬ]

Именно "Размерные ограничения" определяют размер относительно другого представления.

Xamarin IOS Doc

Другие вопросы по тегам