如何调整UIButton的图像大小?我正在设置这样的图像:
[myLikesButton setImage:[UIImage imageNamed:@"icon-heart.png"] forState:UIControlStateNormal];
然而,这会将图像填满整个按钮,如何缩小图像?
答案 0 :(得分:207)
如果我理解你正在尝试做什么,你需要使用按钮图像边缘插图。类似的东西:
myLikesButton.imageEdgeInsets = UIEdgeInsetsMake(top, left, bottom, right);
答案 1 :(得分:84)
我想设置UIButton
图片插图,因为我没有意识到我可以在按钮的UIImageView
上设置内容模式,这样就无需使用UIEdgeInsets和hard-编码值。只需访问按钮上的基础图像视图并设置内容模式:
myButton.imageView.contentMode = UIViewContentModeScaleAspectFit;
请参阅UIButton doesn't listen to content mode setting?
Swift 3
myButton.imageView?.contentMode = .scaleAspectFit
答案 2 :(得分:23)
您可以使用imageEdgeInsets
属性
按钮图像周围矩形的插入或开始边距。
[self.btn setImageEdgeInsets:UIEdgeInsetsMake(6, 6, 6, 6)];
正值会缩小或移动边缘移动。负值会扩大或消除该边缘。
答案 3 :(得分:23)
答案 4 :(得分:22)
斯威夫特3:
button.setImage(UIImage(named: "checkmark_white"), for: .normal)
button.contentVerticalAlignment = .fill
button.contentHorizontalAlignment = .fill
button.imageEdgeInsets = UIEdgeInsetsMake(10, 10, 10, 10)
答案 5 :(得分:17)
如果你的图像太大(并且你不能/不想让图像变小),前两个答案的组合效果很好。
addButton.imageView?.contentMode = .scaleAspectFit
addButton.imageEdgeInsets = UIEdgeInsetsMake(15.0, 15.0, 15.0, 5.0)
除非你的图像插入恰到好处,否则图像会在不改变contentMode
的情况下倾斜。
答案 6 :(得分:14)
继承Swift版本:
myButton.imageEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
答案 7 :(得分:7)
在Tim C's answer的帮助下,我能够使用Swift在UIButton
上创建扩展,允许您使用.setImage()
函数指定图像框架,并添加frame
1}}参数
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)
,并将其图像设置为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
)
答案 8 :(得分:7)
Swift 4
您需要按此特定顺序使用这两行代码。您只需要更改边缘插入的顶部和底部值。
addButton.imageView?.contentMode = .scaleAspectFit
addButton.imageEdgeInsets = UIEdgeInsetsMake(10.0, 0.0, 10.0, 0.0)
答案 9 :(得分:5)
使用时更改图标大小
UIEdgeInsetsMake(top, left, bottom, right)
,请记住按钮维度以及UIEdgeInsetsMake使用负值的能力,就像它们是正数一样。
示例:两个高度为100且宽高比为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))
答案 10 :(得分:4)
已更新为Swift> 5
设置大小:
button.frame = CGRect(x: 0, y: 0, width: 44, height: 44)
设置边距:
button.imageEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
答案 11 :(得分:2)
一种方法是在代码中调整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!
}
答案 12 :(得分:1)
针对Swift 3进行了更新
yourButtonName.imageEdgeInsets = UIEdgeInsetsMake(10, 10, 10, 10)
答案 13 :(得分:1)
Swift 3
我将myButton的宽度和高度设置为40,并且EdgeInsetsMake的填充是15的所有边。我建议在按钮上添加背景颜色以查看实际的填充。
myButton.backgroundColor = UIColor.gray // sample color to check padding
myButton.imageView?.contentMode = .scaleAspectFit
myButton.imageEdgeInsets = UIEdgeInsetsMake(15, 15, 15, 15)
答案 14 :(得分:0)
这是缩放UIButton的imageView的另一种解决方案。
if ( $( this ).hasClass( "protected" ) ) {
$( this )
.animate({ left: -10 })
.animate({ left: 10 })
.animate({ left: -10 })
.animate({ left: 10 })
.animate({ left: 0 });
}
答案 15 :(得分:-3)
我认为,您的图片大小也与按钮大小相同,然后您将图片放在按钮的背景中,如:
[myLikesButton setBackgroundImage:[UIImage imageNamed:@"icon-heart.png"] forState:UIControlStateNormal];
你的桅杆有相同尺寸的图像和按钮。我希望你理解我的观点。