在Swift中的按钮上设置图像/图标

时间:2018-01-01 19:59:47

标签: ios swift uibutton

我正在努力实现这样的目标:

enter image description here

所以我想在我的按钮标题的左侧添加一个图像。

我在文档中找到了以下段落:

enter image description here

button.currentImage是只读属性,我无法设置它。 谁能说出如何实施呢?

我试图这样做:

private let logoButton: UIButton = {
    let button = UIButton(type: .custom)
    button.setTitle("Logo", for: .normal)
    button.setImage(UIImage(named:"logo"), for: .normal)
    button.translatesAutoresizingMaskIntoConstraints = false
    button.addTarget(self, action: #selector(handleLogo), for: .touchUpInside)
    return button
}()

但不幸的是,我在按钮内拉伸了图片而没有标题......

我错过了什么吗?或者我应该尝试使用image + lable创建自定义视图并使其可点击?感谢

6 个答案:

答案 0 :(得分:3)

您应该正确设置按钮项的边缘插入。

您可以在此处找到IB属性:

enter image description here

以编程方式,您可以设置边缘插入,如下所示:

 [button setTitleEdgeInsets:UIEdgeInsetsMake(0, 20, 0, 0)];
 [button setImageEdgeInsets:UIEdgeInsetsMake(0, -70, 0, 0)];

UPD:

enter image description here

答案 1 :(得分:1)

我认为当你需要改变按钮的大小并修改像

这样的代码时

图像大小@ 1x(25 * 25),@ 2x(50 * 50),@ 3x(75 * 75)像素添加资产

self.buttonNext.backgroundColor = .blue
self.buttonNext.setImage( "your image", for: .normal)
self.buttonNext.setTitle("Logo", for: .normal)

或者如果你想要按钮文本之间的空格使用图像插入属性。

答案 2 :(得分:1)

一个好的方法是创建一个具有所需尺寸的UIView,然后在其中设置UIImage,将其设置为AspectFit(或任何您想要的尺寸),然后再设置{{ 1}}您需要。与UILabel相比,您可以自定义更多视图。另外,您需要在视图上连接UIButton,如下所示:

UITapGestureRecognizer

正如我所说,我更喜欢这种方式,它有更多的空间来定制事物。

答案 3 :(得分:0)

没有头衔?

也许你的View的backgroundColor是白色的,你的UIButton textColor也是白色的,所以它看起来没有标题

button.backgroundColor = UIColor.blue

答案 4 :(得分:0)

设置插入选项后,按钮的图像将被挤压。您可以使用此选项来保持图像的形状。

User Defined Runtime Attributes

答案 5 :(得分:0)

[![在此处输入图片描述][1]][1]

我喜欢创建易于居中的 UIViews。我知道它有一些额外的代码,但它确实让我得到了我想要的

let googleView = UIView()
googleView.layer.backgroundColor = UIColor.white.cgColor
googleView.frame = CGRect(x: 30, y: 100, width: view.bounds.width - 60, height: 50)
googleView.layer.cornerRadius = googleView.frame.height / 2
let googleButton = UIView()
googleButton.frame = CGRect(x: googleView.layer.cornerRadius, y: 0, width: googleView.frame.width - 2 * googleView.layer.cornerRadius, height: 50
let googleImage = UIImageView(image: UIImage(named: "googleLogo"))
googleImage.frame = CGRect(x: 0, y: 10, width: 30, height: 30)
googleButton.addSubview(googleImage)
let googleLabel = UILabel()
googleLabel.frame = CGRect(x: googleImage.frame.maxX, y: 10, width: 1000, height: 30)
googleLabel.text = "   Sign up with Google"
googleLabel.font = UIFont.boldSystemFont(ofSize: 17)
googleLabel.sizeToFit()
googleLabel.center.y = googleImage.center.y
googleButton.addSubview(googleLabel)
googleButton.frame.size.width = googleLabel.frame.maxX
googleButton.center.x = googleView.frame.width / 2
googleView.addSubview(googleButton)
let googleTap = UITapGestureRecognizer(target: self, action: #selector(googleLogin))
googleView.isUserInteractionEnabled = true
googleView.addGestureRecognizer(googleTap)
view.addSubview(googleView)


  [1]: https://i.stack.imgur.com/HaZyU.png