如何调整UIButton的imageSize?

时间:2012-05-14 01:25:22

标签: ios objective-c xcode uibutton

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

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

然而,这会将图像填满整个按钮,如何缩小图像?

16 个答案:

答案 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)

你也可以从这样的inteface构建器那样做。

enter image description here

我觉得它很有帮助。

答案 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)

enter image description here

left.imageEdgeInsets = UIEdgeInsetsMake(40, 0, 40, 0)
right.imageEdgeInsets = UIEdgeInsetsMake(45, 0, 45, 0)

enter image description here

left.imageEdgeInsets = UIEdgeInsetsMake(40, 0, 40, 0)
right.imageEdgeInsets = UIEdgeInsetsMake(60, 0, 60, 0)

enter image description here

实例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];

你的桅杆有相同尺寸的图像和按钮。我希望你理解我的观点。