如何调整UIButton的imageSize?

adi*_*dit 139 xcode objective-c uibutton ios

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

[myLikesButton setImage:[UIImage imageNamed:@"icon-heart.png"] forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)

但是,这会将图像填满整个按钮,如何使图像变小?

小智 226

如果我理解你正在尝试做什么,你需要使用按钮图像边缘插入.就像是:

myLikesButton.imageEdgeInsets = UIEdgeInsets(top, left, bottom, right)
Run Code Online (Sandbox Code Playgroud)

  • 此方法在 iOS 15 中已弃用。请参阅 /sf/ask/4782962691/ (10认同)

Kyl*_*egg 89

蒂姆的答案是正确的,但我想补充一点建议,因为在我的情况下,完全有一个更简单的解决方案.

我想设置UIButton图像插入,因为我没有意识到我可以在按钮上设置内容模式UIImageView,这将无需使用UIEdgeInsets和硬编码值.只需访问按钮上的基础imageview并设置内容模式:

myButton.imageView.contentMode = UIViewContentModeScaleAspectFit;
Run Code Online (Sandbox Code Playgroud)

请参阅UIButton不听内容模式设置?

斯威夫特3

myButton.imageView?.contentMode = .scaleAspectFit
Run Code Online (Sandbox Code Playgroud)


Jos*_*nor 33

斯威夫特3:

button.setImage(UIImage(named: "checkmark_white"), for: .normal)
button.contentVerticalAlignment = .fill
button.contentHorizontalAlignment = .fill
button.imageEdgeInsets = UIEdgeInsetsMake(10, 10, 10, 10)
Run Code Online (Sandbox Code Playgroud)

  • 这对我很有效.我在Inkscape中创建了一个PDF图标,并且`contentVerticalAlignment/contentHorizo​​ntalAlignment`选项使我能够按照我希望的方式进行缩放.感谢您发布此内容. (3认同)
  • 设置 `contentHorizo​​ntalAlignment` 和 `contentVerticalAlignment` 起到了作用 (2认同)
  • 当使用 PDF 资源作为图标时,此解决方案非常有效。谢谢你! (2认同)

Mil*_*dic 29

你也可以从这样的inteface builder那里做到这一点.

在此输入图像描述

我认为这很有帮助.


小智 23

你可以使用imageEdgeInsets属性按钮图像周围的矩形的插入或开始边距.

 [self.btn setImageEdgeInsets:UIEdgeInsetsMake(6, 6, 6, 6)];
Run Code Online (Sandbox Code Playgroud)

正值会缩小或缩小边缘移动.负值会扩展或偏离该边缘.


小智 21

如果您的图像太大(并且您不能/不想让图像变小),前两个答案的组合效果很好.

addButton.imageView?.contentMode = .scaleAspectFit
addButton.imageEdgeInsets = UIEdgeInsetsMake(15.0, 15.0, 15.0, 5.0)
Run Code Online (Sandbox Code Playgroud)

除非你的图像插入恰到好处,否则图像会在不改变图像的情况下倾斜contentMode.


Esq*_*uth 15

继承了Swift版本:

myButton.imageEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
Run Code Online (Sandbox Code Playgroud)


Ale*_*kov 14

如果您使用按钮的符号图像,那么此解决方案更好:

button.setPreferredSymbolConfiguration(UIImage.SymbolConfiguration(pointSize: 48), forImageIn: .normal)
Run Code Online (Sandbox Code Playgroud)


tri*_*ode 13

插入图像对我来说很有效,但我还需要将按钮“类型”设置为“自定义”,将按钮“样式”设置为“默认”。Xcode 13 中添加的按钮默认类型为 System,样式为 Plain。

self.imageEdgeInsets = UIEdgeInsets(top: 3.0, left: 3.0, bottom: 3.0, right: 3.0)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Van*_*ran 8

斯威夫特4

您需要按此特定顺序使用这两行代码.您只需要更改边缘插入的顶部和底部值.

addButton.imageView?.contentMode = .scaleAspectFit
addButton.imageEdgeInsets = UIEdgeInsetsMake(10.0, 0.0, 10.0, 0.0)
Run Code Online (Sandbox Code Playgroud)


Joj*_*dmo 7

Tim C的回答的帮助下,我能够创建一个UIButton使用Swift 的扩展,允许您通过使用.setImage()带有额外frame参数的函数来指定图像帧

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
            )
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

使用它,如果你想设置一个UIButtonto 的框架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
)
Run Code Online (Sandbox Code Playgroud)

  • 你应该'如果让'而不是检查`frame`是否为'nil`然后[强制展开无数次](https://i.imgflip.com/utfq7.jpg). (3认同)

Bor*_*nko 6

使用更改图标大小时 UIEdgeInsetsMake(top, left, bottom, right),请记住按钮尺寸和UIEdgeInsetsMake可以将负值当作正值使用。

示例:两个高度为100且纵横比为1:1的按钮。

left.imageEdgeInsets = UIEdgeInsetsMake(40, 0, 40, 0)
right.imageEdgeInsets = UIEdgeInsetsMake(40, 0, 40, 0)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

left.imageEdgeInsets = UIEdgeInsetsMake(40, 0, 40, 0)
right.imageEdgeInsets = UIEdgeInsetsMake(45, 0, 45, 0)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

left.imageEdgeInsets = UIEdgeInsetsMake(40, 0, 40, 0)
right.imageEdgeInsets = UIEdgeInsetsMake(60, 0, 60, 0)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

示例1和3相同,因为ABS(100-(40 + 40))= ABS(100-(60 + 60))


ovo*_*ovo 5

这是缩放UIButton的imageView的另一种解决方案。

button.imageView?.layer.transform = CATransform3DMakeScale(0.8, 0.8, 0.8)
Run Code Online (Sandbox Code Playgroud)

  • 你救了我的命。我只是想缩放按钮内的图像。没有插图,什么也没有,谢谢! (2认同)

ska*_*tus 5

更新为 Swift > 5

设置尺寸:

button.frame = CGRect(x: 0, y: 0, width: 44, height: 44)
Run Code Online (Sandbox Code Playgroud)

设置边距:

button.imageEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
Run Code Online (Sandbox Code Playgroud)