当我为按钮创建图像时,按钮的标题不再显示了?

时间:2017-10-02 16:37:02

标签: ios swift swift3 uibutton uiimage

button.setTitle("Like", for: .normal)
button.setTitleColor(UIColor.rgb(red: 143, green: 150, blue: 163), for: .normal)
button.setImage(UIImage(named:"like"), for: .normal)
button.titleEdgeInsets = UIEdgeInsets(top: 0, left: 8 , bottom:0, right: 0)
button.imageView?.contentMode = .scaleAspectFit

addConstraintsWithFormat(format: "H:|[v0]|", views: likeButton)
addConstraintsWithFormat(format: "V:|[v0(44)]|", views:likeButton)

如果我删除“button.setImage(UIImage(named:"like"), for: .normal)”行,则标题会正确显示。我可以同时显示标题和图像吗?

1 个答案:

答案 0 :(得分:1)

创建UIButton的子类并覆盖

class MyButton : UIButton {
    override func titleRect(forContentRect contentRect: CGRect) -> CGRect {
        return CGRect(x: 0, y: self.bounds.size.height/2, width: self.bounds.size.width/2, height: self.bounds.size.height)
    }

    override func imageRect(forContentRect contentRect: CGRect) -> CGRect {
        return CGRect(x: (self.bounds.size.width/2 + 5), y: self.bounds.size.height/2, width: (self.bounds.size.width/2 - 5), height: self.bounds.size.height)
    }
}

为标题和图像计算的矩形相对于UIButton的边界,因此无论UIButton采用何种尺寸,它们都会根据计算进行调整以匹配其大小。

在下面的图片中,abcd是标题,你在右侧看到的是按钮标题图片。

enter image description here

<强>陷阱

UIButton尊重内在大小,这意味着他们将采用标题和标题图片叙述的大小,除非他们对它们有足够的自动布局限制,直接/间接决定其框架。

如果您将巨大的图像设置为按钮标题或将非常小的图像设置为按钮标题图像,则除非您具有宽度和宽度,否则您可能会分别看到非常大或非常小的按钮。高度或尾部,前导和顶部,底部约束。

因为标题和图像的数量是相对于Button的边界计算的,所以确保你有足够的约束来正确决定按钮的大小或确保你有完美尺寸的图像以确保按钮合适大小

快乐编码