如何调整UIButton的imageSize?

如何调整UIButton的图像大小? 我正在像这样设置图像:

[myLikesButton setImage:[UIImage imageNamed:@"icon-heart.png"] forState:UIControlStateNormal]; 

然而,这充满了图像的全部button,我如何使图像更小?

如果我正确理解你想要做什么,你需要玩button图像边缘embedded。 就像是:

 myLikesButton.imageEdgeInsets = UIEdgeInsetsMake(top, left, bottom, right); 

蒂姆的回答是正确的,但是我想补充一点,因为在我的情况下,有一个更简单的解决scheme。

我正在寻找设置UIButton图像插入,因为我没有意识到,我可以在button的UIImageView上设置内容模式,这将阻止需要使用UIEdgeInsets和硬编码值完全。 只需访问button上的底层imageview并设置内容模式:

 myButton.imageView.contentMode = UIViewContentModeScaleAspectFit; 

看到UIButton不听内容模式设置?

Swift 3

 myButton.imageView?.contentMode = .scaleAspectFit 

您可以使用imageEdgeInsets属性矩形周围的button图像的插入或开始边距。

  [self.btn setImageEdgeInsets:UIEdgeInsetsMake(6, 6, 6, 6)]; 

积极的价值缩小或embedded,边缘移动。 负值会扩大或突破该边缘。

下面是Swift版本:

 myButton.imageEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10) 

你也可以从这样的界面生成器来做到这一点。

在这里输入图像说明

我认为这是有帮助的。

如果你的图片太大(你不能/不想把图片缩小),前两个答案的组合就很好。

  addButton.imageView?.contentMode = .scaleAspectFit addButton.imageEdgeInsets = UIEdgeInsetsMake(15.0, 15.0, 15.0, 5.0) 

除非您将图像插入正确,否则图像将偏斜而不更改contentMode

在Tim C的答案的帮助下,我能够使用Swift在UIButton上创build一个扩展,允许您使用.setImage()函数和一个额外的frame参数来指定图像帧

 extension UIButton{ func setImage(image: UIImage?, inFrame frame: CGRect?, forState state: UIControlState){ self.setImage(image, forState: state) if let frame = frame{ self.imageEdgeInsets = UIEdgeInsets( top: frame.minY - self.frame.minY, left: frame.minX - self.frame.minX, bottom: self.frame.maxY - frame.maxY, right: self.frame.maxX - frame.maxX ) } } } 

使用这个,如果你想将UIButton的框架设置为CGRectMake(0, 0, 64, 64) ,并用CGRectMake(8, 8, 48, 48)的框架将它的图像设置为myImage ,你可以使用

 let button: UIButton = UIButton(frame: CGRectMake(0, 0, 64, 64)) button.setImage( myImage, inFrame: CGRectMake(8, 8, 48, 48), forState: UIControlState.Normal ) 

Swift 3:

 button.setImage(UIImage(named: "checkmark_white"), for: .normal) button.contentVerticalAlignment = .fill button.contentHorizontalAlignment = .fill button.imageEdgeInsets = UIEdgeInsetsMake(10, 10, 10, 10) 

更新了Swift 3

 yourButtonName.imageEdgeInsets = UIEdgeInsetsMake(10, 10, 10, 10) 

Swift 3

我将myButton的宽度和高度设置为40,EdgeInsetsMake的填充是15。 我build议添加一个背景颜色到你的button来查看实际的填充。

 myButton.backgroundColor = UIColor.gray // sample color to check padding myButton.imageView?.contentMode = .scaleAspectFit myButton.imageEdgeInsets = UIEdgeInsetsMake(15, 15, 15, 15) 

我认为,你的图像大小也是一样的button大小,然后你把图像的button的背景,如:

 [myLikesButton setBackgroundImage:[UIImage imageNamed:@"icon-heart.png"] forState:UIControlStateNormal]; 

你的桅杆有相同的图像和button的大小,我希望你能理解我的观点。