UIButton大小错误的图像和标题插入

时间:2015-04-20 02:19:13

标签: ios swift uibutton

看起来UIButton instrinsicSize和/或sizeToFit似乎没有考虑到标题左边缘插入,或者某些事情与我的期望搞混了。

为了演示,我在视图中有两个自定义类型按钮,标题为"按钮"。我想在标题左侧的按钮中添加图像。

    var image = UIImage(named: "circledPlay")
    image = image?.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate)

    self.button1.setImage(image, forState: UIControlState.Normal)
    self.button1.invalidateIntrinsicContentSize()
    self.button1.sizeToFit()

    self.button2.setImage(image, forState: UIControlState.Normal)
    self.button2.titleEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0)
    self.button2.invalidateIntrinsicContentSize()
    self.button2.sizeToFit()

结果如下:

screen shot

注意第二个按钮被截断。

所以我的问题是,如果有人之前已经看过这个(并希望有一个解决方案)或者我感到困惑,这表现得如预期的那样(并且希望知道这样做的正确方法)?

2 个答案:

答案 0 :(得分:10)

正如文档中所述,对于titleEdgeInsets:"该按钮不会使用此属性来确定intrinsicContentSizesizeThatFits:"。 因此,设置titleEdgeInsets只会移动标题标签,但不会影响按钮的大小。如果您希望按钮在内容周围有更多填充,请同时设置contentEdgeInsets。我认为您不需要拨打sizeToFitinvalidateIntrinsicContentSize(但我不确定)。

答案 1 :(得分:3)

您可以使用contentEdgeInsetstitleEdgeInsets来实现这一目标。

button2.setImage(image, for: .normal)
button2.backgroundColor = UIColor(white: 0.9, alpha: 1.0)
button2.contentEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 10)
button2.titleEdgeInsets = UIEdgeInsetsMake(0, 10, 0, -10)
button2.setTitle("Button", for: .normal)
button2.sizeToFit()

button result