如何以编程方式调整UIButton中的图像大小?

时间:2016-11-09 18:58:39

标签: ios swift xcode swift3 xcode8

我有这个UIButton和一个适合的图像。 我不希望图像占据按钮内的所有空间,只是它的一小部分位于中心,但如果我调整按钮的大小,它也会调整图像的大小。 我怎么能这样做,有没有选择设置我想要的任何尺寸独立于UIButton的大小? 谢谢!

6 个答案:

答案 0 :(得分:12)

这可以通过以下方式的代码完成:

let imageSize:CGSize = CGSize(width: 20, height: 20)

let button:UIButton = UIButton(type: UIButtonType.custom)
button.frame = CGRect(x: 200, y: 200, width: 60, height: 60)
button.backgroundColor = UIColor.yellow
button.setImage(UIImage(named: "chat.png"), for: UIControlState.normal)

// The below line will give you what you want    
button.imageEdgeInsets = UIEdgeInsetsMake(
    (button.frame.size.height - imageSize.height) / 2, 
    (button.frame.size.width - imageSize.width) / 2, 
    (button.frame.size.height - imageSize.height) / 2, 
    (button.frame.size.width - imageSize.width) / 2)

self.view.addSubview(button)

这样,你就可以达到你想要的效果。

答案 1 :(得分:8)

您可以尝试使用图片视图插图。每个UIButton都有一个属性imageView。

在Swift 3中你可以这样做:

@Converter(autoApply = true)
public class OffsetDateTimeAttributeConverter implements AttributeConverter<OffsetDateTime, Timestamp> {
    @Override
    public Timestamp convertToDatabaseColumn(OffsetDateTime entityValue) {
        if( entityValue == null )
            return null;

        return Timestamp.from(Instant.from(entityValue));
    }

    @Override
    public OffsetDateTime convertToEntityAttribute(Timestamp databaseValue) {
        if( databaseValue == null )
            return null;

        return OffsetDateTime.parse(databaseValue.toInstant().toString());
    }
}

红色背景只是让你知道正在发生什么变化

答案 2 :(得分:4)

我会这样做:

UIButton只是UIView。您只需添加带有设置图片的UIImageView,然后在addSubview上致电UIButton

您还应该在userInteractionEnabled上将UIImageView设置为 false

答案 3 :(得分:3)

在将contentHorizo​​ntalAlignment和contentVerticalAlignment都设置为.fill之前,我无法调整按钮的imageView的大小。然后使用imageEdgeInsets重新定位图像。

let button = UIButton()
let image = UIImage(systemName: "bag.badge.plus")
button.setImage(image, for: .normal)
button.contentHorizontalAlignment = .fill
button.contentVerticalAlignment = .fill
button.imageEdgeInsets = UIEdgeInsets(top: 6, left: 6, bottom: 10, right: 10)

结果:

enter image description here

答案 4 :(得分:1)

在我执行此操作之前,考虑到KVISH所说的内容,它按预期工作。我发布此邮件是因为Houman要求提供示例。

//grab the image using the name of the pic
var image = UIImage(named: "picture")

//set the size for the image
image = image?.resize(toWidth: 18)
image = image?.resize(toHeight: 18)

//set the image to the button
buttonName.setImage(image, for: UIControlState.normal)

//adjust the position
buttonName.imageEdgeInsets = UIEdgeInsetsMake(8,16,9,0)

答案 5 :(得分:1)

可以通过将imageEdgeInsets添加到UIButton来实现。

在swift4.2

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