在UIButton缩放图像到AspectFit?

我想添加一个图像到UIButton,也想缩放我的图像,以适应UIButton(使图像变小)。 请告诉我如何去做。

这是我所尝试过的,但它不起作用:

  • 将图像添加到button并使用setContentMode
 [self.itemImageButton setImage:stretchImage forState:UIControlStateNormal]; [self.itemImageButton setContentMode:UIViewContentModeScaleAspectFit]; 
  • 制作“拉伸图像”:
 UIImage *stretchImage = [updatedItem.thumbnail stretchableImageWithLeftCapWidth:0 topCapHeight:0]; 

如果你真的想缩放图像,那就去做吧,但是在使用之前你应该调整它的大小。 在运行时调整它的大小就会丢失CPU周期。

这是我用来缩放图像的类别:

的UIImage + Extra.h

 @interface UIImage (Extras) - (UIImage *)imageByScalingProportionallyToSize:(CGSize)targetSize; @end; 

的UIImage + Extra.m

 @implementation UIImage (Extras) - (UIImage *)imageByScalingProportionallyToSize:(CGSize)targetSize { UIImage *sourceImage = self; UIImage *newImage = nil; CGSize imageSize = sourceImage.size; CGFloat width = imageSize.width; CGFloat height = imageSize.height; CGFloat targetWidth = targetSize.width; CGFloat targetHeight = targetSize.height; CGFloat scaleFactor = 0.0; CGFloat scaledWidth = targetWidth; CGFloat scaledHeight = targetHeight; CGPoint thumbnailPoint = CGPointMake(0.0,0.0); if (!CGSizeEqualToSize(imageSize, targetSize)) { CGFloat widthFactor = targetWidth / width; CGFloat heightFactor = targetHeight / height; if (widthFactor < heightFactor) scaleFactor = widthFactor; else scaleFactor = heightFactor; scaledWidth = width * scaleFactor; scaledHeight = height * scaleFactor; // center the image if (widthFactor < heightFactor) { thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5; } else if (widthFactor > heightFactor) { thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5; } } // this is actually the interesting part: UIGraphicsBeginImageContextWithOptions(targetSize, NO, 0); CGRect thumbnailRect = CGRectZero; thumbnailRect.origin = thumbnailPoint; thumbnailRect.size.width = scaledWidth; thumbnailRect.size.height = scaledHeight; [sourceImage drawInRect:thumbnailRect]; newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); if(newImage == nil) NSLog(@"could not scale image"); return newImage ; } @end 

你可以使用它到你想要的大小。 喜欢 :

 [self.itemImageButton setImage:[stretchImage imageByScalingProportionallyToSize:CGSizeMake(20,20)]]; 

我有同样的问题。 只需设置UIButton内的ImageView的ContentMode即可。

 [[self.itemImageButton imageView] setContentMode: UIViewContentModeScaleAspectFit]; [self.itemImageButton setImage:[UIImage imageNamed:stretchImage] forState:UIControlStateNormal]; 

希望这可以帮助。

这里没有任何答案真的为我工作,我解决了以下代码的问题:

 button.contentMode = UIViewContentModeScaleToFill; button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentFill; button.contentVerticalAlignment = UIControlContentVerticalAlignmentFill; 

您也可以在Interface Builder中执行此操作。

在这里输入图像说明

方面适合模式以编程方式设置UIButton imageView最简单的方法:

迅速

 button.contentHorizontalAlignment = .fill button.contentVerticalAlignment = .fill button.imageView?.contentMode = .scaleAspectFit 

Objective-C的

 button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentFill; button.contentVerticalAlignment = UIControlContentVerticalAlignmentFill; button.imageView.contentMode = UIViewContentModeScaleAspectFit; 

注意:您可以将.scaleAspectFit(UIViewContentModeScaleAspectFit)更改为.scaleAspectFill(UIViewContentModeScaleAspectFill)以设置方面填充模式

我有问题的图像没有按比例调整,所以我修正它的方式是使用边缘插入。

 fooButton.contentEdgeInsets = UIEdgeInsetsMake(10, 15, 10, 15); 

这现在可以通过IB的UIButton属性来完成。 关键是将您的图像设置为背景,否则将无法正常工作。

在这里输入图像说明

在Dave的答案上进行扩展,您可以使用运行时属性来设置button的imageViewcontentMode ,而不使用任何代码。

在这里输入图像说明

  • 1表示UIViewContentModeScaleAspectFit
  • 2将意味着UIViewContentModeScaleAspectFill

如果你只是想减less你的button图像:

 yourButton.contentMode = UIViewContentModeScaleAspectFit; yourButton.imageEdgeInsets = UIEdgeInsetsMake(10, 10, 10, 10); 

最简洁的解决scheme是使用自动布局 。 我降低了我的UIButton 内容压缩阻力优先级 ,并通过Interface Builder设置图像(不是背景图像 )。 之后,我添加了几个约束来定义我的button的大小(在我的情况下相当复杂),它的工作就像一个魅力。

我有办法为我做。 该方法采取了uibutton,使图像方面适合

 -(void)makeImageAspectFitForButton:(UIButton*)button{ button.imageView.contentMode=UIViewContentModeScaleAspectFit; button.contentHorizontalAlignment=UIControlContentHorizontalAlignmentFill; button.contentVerticalAlignment=UIControlContentVerticalAlignmentFill; } 

确保您已将图像设置为图像属性,但不是背景

背景图片实际上可以设置为很容易地扩展方面填充。 只需要在UIButton的子类中做这样的事情:

 - (CGRect)backgroundRectForBounds:(CGRect)bounds { // you'll need the original size of the image, you // can save it from setBackgroundImage:forControlState return CGRectFitToFillRect(__original_image_frame_size__, bounds); } // Utility function, can be saved elsewhere CGRect CGRectFitToFillRect( CGRect inRect, CGRect maxRect ) { CGFloat origRes = inRect.size.width / inRect.size.height; CGFloat newRes = maxRect.size.width / maxRect.size.height; CGRect retRect = maxRect; if (newRes < origRes) { retRect.size.width = inRect.size.width * maxRect.size.height / inRect.size.height; retRect.origin.x = roundf((maxRect.size.width - retRect.size.width) / 2); } else { retRect.size.height = inRect.size.height * maxRect.size.width / inRect.size.width; retRect.origin.y = roundf((maxRect.size.height - retRect.size.height) / 2); } return retRect; } 

你只需要设置三个事件的UIButton imageview的内容模式。

 [cell.button setImage:[UIImage imageWithData:data] forState:UIControlStateNormal]; [cell.button setImage:[UIImage imageWithData:data] forState:UIControlStateHighlighted]; [cell.imgIcon setImage:[UIImage imageWithData:data] forState:UIControlStateSelected]; 

我们有三个事件bcoz的代码,同时突出显示或selectbutton大小是否为SQUARE,图像大小是矩形,然后在突出显示或select时显示方形图像。

我相信它会为你工作。

对于Xamarin.iOS(C#):

  myButton.VerticalAlignment = UIControlContentVerticalAlignment.Fill; myButton.HorizontalAlignment = UIControlContentHorizontalAlignment.Fill; myButton.ImageView.ContentMode = UIViewContentMode.ScaleAspectFit;