我正在制作一个自定义键盘,我需要将移位图标的图像置于移位按钮内。图像为100px x 100px。
但是,纵向中的按钮框为36pt x 38pt
,横向上的按钮框为68pt x 32pt
。我尝试使用按钮图像插入属性来居中图像。但是,它没有这样做。
我尝试了自己并将图像边缘插入设置为(25,25,25,25)
,图像以两种尺寸居中。但是,图标变得太小而无法看到。
shiftButton.setImage(UIImage(named: "shift"), forState: .Normal)
shiftButton.imageEdgeInsets = UIEdgeInsetsMake(0,0,0,0)
我以编程方式创建按钮。并且,我需要按钮来保持其纵横比,即1:1
。它的最大宽度或高度始终与按钮的高度本身相关联。图像宽度/高度应该是按钮高度的最大值。并且,它不应该以任何方式扭曲图标。但是,按钮本身可以伸展。
我需要根据按钮帧缩放图像,但要保持其宽高比。并且,它可以缩小或缩放,但应始终保持1:1的宽高比。
有任何解决此问题的建议吗?
答案 0 :(得分:24)
最后一个解决方案来了。您必须在UIButton中为图像设置内容模式。
当您在按钮内使用前景图片以及contentMode
的{{1}}时,解决方案是更新Image
的{{1}}。
contentMode
答案 1 :(得分:9)
答案 2 :(得分:4)
将按钮的内容模式设置为Center
:
shiftButton.contentMode = .Center
答案 3 :(得分:3)
如果使用情节提要,请仔细检查按钮标题没有设置任何内容。
答案 4 :(得分:2)
答案 5 :(得分:0)
使用图像处理 UIButton 是一件棘手的事情。我认为以下两行可以解决您的问题。
还有一个好帖子Aligning text and image on UIButton
// Keep button's image to its original ratio.
button.imageView?.contentMode = .scaleAspectFit
// Give button image a little space from all the four edges.
button.imageEdgeInsets = UIEdgeInsets(top: 3, left: 3, bottom: 3, right: 3)
lazy var downloadButton: TransitionButton = {
let button = TransitionButton()
button.translatesAutoresizingMaskIntoConstraints = false
let config = UIImage.SymbolConfiguration(pointSize: 26, weight: .bold, scale: .default)
let image = UIImage(systemName: "arrow.down", withConfiguration: config)?.withTintColor(.white, renderingMode: .alwaysOriginal)
button.setImage(image, for: .normal)
button.imageView?.contentMode = .scaleAspectFit
button.imageEdgeInsets = UIEdgeInsets(top: 3, left: 3, bottom: 3, right: 3)
button.backgroundColor = .systemPink
button.layer.cornerRadius = 12
button.addTarget(self, action: #selector(downloadButtonTapped(_:)), for: .touchUpInside)
button.spinnerColor = .white
return button
}()