如何调整UIButton的图像大小?我正在这样设置图像:
[myLikesButton setImage:[UIImage imageNamed:@"icon-heart.png"] forState:UIControlStateNormal];
但是,这会将图像填充到完整按钮,如何缩小图像?
如何调整UIButton的图像大小?我正在这样设置图像:
[myLikesButton setImage:[UIImage imageNamed:@"icon-heart.png"] forState:UIControlStateNormal];
但是,这会将图像填充到完整按钮,如何缩小图像?
Answers:
蒂姆的答案是正确的,但是我想添加另一个建议,因为就我而言,这是一个更简单的解决方案。
我之所以要设置UIButton
图像插图,是因为我没有意识到我可以在按钮的上设置内容模式UIImageView
,这样可以避免完全使用UIEdgeInsets和硬编码值。只需访问按钮上的基础imageview并设置内容模式:
myButton.imageView.contentMode = UIViewContentModeScaleAspectFit;
迅捷3
myButton.imageView?.contentMode = .scaleAspectFit
button.backgroundImageView.contentMode
不起作用
斯威夫特3:
button.setImage(UIImage(named: "checkmark_white"), for: .normal)
button.contentVerticalAlignment = .fill
button.contentHorizontalAlignment = .fill
button.imageEdgeInsets = UIEdgeInsetsMake(10, 10, 10, 10)
contentVerticalAlignment/contentHorizontalAlignment
选项可以按自己的方式缩放它。感谢您发布此信息。
contentHorizontalAlignment
并contentVerticalAlignment
没有诀窍
如果您的图片太大(并且您不能/不希望只是缩小图片),那么将前两个答案结合起来效果很好。
addButton.imageView?.contentMode = .scaleAspectFit
addButton.imageEdgeInsets = UIEdgeInsetsMake(15.0, 15.0, 15.0, 5.0)
除非您获得正确的图像插图,否则图像将歪斜而不会更改contentMode
。
您可以使用imageEdgeInsets
属性按钮图像周围矩形的插入或插入边距。
[self.btn setImageEdgeInsets:UIEdgeInsetsMake(6, 6, 6, 6)];
正值会缩小或插入该边缘(移动)。负值扩展或起始于该边缘。
这是缩放UIButton的imageView的另一种解决方案。
button.imageView?.layer.transform = CATransform3DMakeScale(0.8, 0.8, 0.8)
借助Tim C的答案,我能够在UIButton
Swift 上创建扩展,该扩展允许您通过将.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
)
}
}
}
使用此方法,如果您想将a的框架设置UIButton
为CGRectMake(0, 0, 64, 64)
,并myImage
使用的框架将其图像设置为,则CGRectMake(8, 8, 48, 48)
可以使用
let button: UIButton = UIButton(frame: CGRectMake(0, 0, 64, 64))
button.setImage(
myImage,
inFrame: CGRectMake(8, 8, 48, 48),
forState: UIControlState.Normal
)
使用更改图标大小时
UIEdgeInsetsMake(top, left, bottom, right)
,请记住按钮尺寸和UIEdgeInsetsMake可以将负值当作正值使用。
示例:两个按钮的高度为100,宽高比为1:1。
left.imageEdgeInsets = UIEdgeInsetsMake(40, 0, 40, 0)
right.imageEdgeInsets = UIEdgeInsetsMake(40, 0, 40, 0)
left.imageEdgeInsets = UIEdgeInsetsMake(40, 0, 40, 0)
right.imageEdgeInsets = UIEdgeInsetsMake(45, 0, 45, 0)
left.imageEdgeInsets = UIEdgeInsetsMake(40, 0, 40, 0)
right.imageEdgeInsets = UIEdgeInsetsMake(60, 0, 60, 0)
示例1和3相同,因为ABS(100-(40 + 40))= ABS(100-(60 + 60))
一种方法是使用以下代码来调整UIImage的大小。注意:此代码仅按高度缩放,但是您也可以轻松地将函数调整为按宽度缩放。
let targetHeight = CGFloat(28)
let newImage = resizeImage(image: UIImage(named: "Image.png")!, targetHeight: targetHeight)
button.setImage(newImage, for: .normal)
fileprivate func resizeImage(image: UIImage, targetHeight: CGFloat) -> UIImage {
// Get current image size
let size = image.size
// Compute scaled, new size
let heightRatio = targetHeight / size.height
let newSize = CGSize(width: size.width * heightRatio, height: size.height * heightRatio)
let rect = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height)
// Create new image
UIGraphicsBeginImageContextWithOptions(newSize, false, 0)
image.draw(in: rect)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
// Return new image
return newImage!
}