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