UIImageView方面适合和中心

我有一个图像视图,以编程方式声明,我也设置其形象,也编程。

但是,我发现自己无法将图像设置为适合方面并将中心alignment到图像视图。

换句话说,我希望图像:

  • 如果图像很大,则缩小以适应该方面。
  • 中心,但不放大,如果图像很小。

我如何得到这个?

刚刚贴上解决scheme:

就像@manohar所说

imageView.contentMode = UIViewContentModeCenter; if (imageView.bounds.size.width > ((UIImage*)imagesArray[i]).size.width && imageView.bounds.size.height > ((UIImage*)imagesArray[i]).size.height) { imageView.contentMode = UIViewContentModeScaleAspectFit; } 

解决了我的问题

在swift语言中我们可以设置UIImage视图的内容模式如下:

 let newImgThumb = UIImageView(frame: CGRect(x: 10, y: 10, width: 100, height: 100)) newImgThumb.contentMode = .scaleAspectFit 
 [your_imageview setContentMode:UIViewContentModeCenter]; 

将imageView的contentMode设置为UIViewContentModeScaleAspectFit就足够了。 它似乎也中心的图像。 我不确定为什么其他人正在使用基于图像的逻辑。 请参阅此问题: iOS方面适合和中心

我解决了这个问题

  1. setImage到UIImageView (带有UIViewContentModeScaleAspectFit
  2. get imageSize (CGSize imageSize = imageView.image.size)
  3. UIImageViewresize。 [imageView sizeThatFits:imageSize]
  4. 移动你想要的位置。

我想UIView放在UICollectionViewCell的顶部中心。 所以,我使用了这个function。

 - (void)setImageToCenter:(UIImageView *)imageView { CGSize imageSize = imageView.image.size; [imageView sizeThatFits:imageSize]; CGPoint imageViewCenter = imageView.center; imageViewCenter.x = CGRectGetMidX(self.contentView.frame); [imageView setCenter:imageViewCenter]; } 

这个对我有用。

您可以通过将图像视图的内容模式设置为UIViewContentModeScaleAspectFill来实现此目的。

然后使用下面的方法获取resize的uiimage对象。

 - (UIImage*)setProfileImage:(UIImage *)imageToResize onImageView:(UIImageView *)imageView { CGFloat width = imageToResize.size.width; CGFloat height = imageToResize.size.height; float scaleFactor; if(width > height) { scaleFactor = imageView.frame.size.height / height; } else { scaleFactor = imageView.frame.size.width / width; } UIGraphicsBeginImageContextWithOptions(CGSizeMake(width * scaleFactor, height * scaleFactor), NO, 0.0); [imageToResize drawInRect:CGRectMake(0, 0, width * scaleFactor, height * scaleFactor)]; UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return resizedImage; } 

编辑在这里(迅捷版)

 func setProfileImage(imageToResize: UIImage, onImageView: UIImageView) -> UIImage { let width = imageToResize.size.width let height = imageToResize.size.height var scaleFactor: CGFloat if(width > height) { scaleFactor = onImageView.frame.size.height / height; } else { scaleFactor = onImageView.frame.size.width / width; } UIGraphicsBeginImageContextWithOptions(CGSizeMake(width * scaleFactor, height * scaleFactor), false, 0.0) imageToResize.drawInRect(CGRectMake(0, 0, width * scaleFactor, height * scaleFactor)) let resizedImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return resizedImage; } 

如果图像不大于视图,则该子类使用中心,否则将缩小。 我发现这对于更改大小的UIImageView很有用。

它显示的图像比大尺寸的视图小,但比小尺寸的视图大。 我只希望它缩小,但不是。

 class CenterScaleToFitImageView: UIImageView { override var bounds: CGRect { didSet { adjustContentMode() } } override var image: UIImage? { didSet { adjustContentMode() } } func adjustContentMode() { guard let image = image else { return } if image.size.width > bounds.size.width || image.size.height > bounds.size.height { contentMode = .ScaleAspectFit } else { contentMode = .Center } } } 
 let bannerImageView = UIImageView(); bannerImageView.contentMode = .ScaleAspectFit; bannerImageView.frame = CGRectMake(cftX, cftY, ViewWidth, scrollHeight);