Изображение 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 имели одинаковый эффект. Я плакал, как ребенок, когда не мог заставить его сидеть широкоформатно на площади.
В моем случае я решил эту проблему, удалив некоторые ограничения, изменяющие размер изображения, которые я установил по ошибке.
[ОБНОВИТЬ]
Именно "Размерные ограничения" определяют размер относительно другого представления.