使用autolayout更新按钮图像后,UIButton大小不会自动更新

时间:2016-03-16 23:49:02

标签: ios swift autolayout

我有一个UIButton,它受到前导,尾随和中心垂直约束的约束。按钮左侧的标签会一直增长,直到按钮的尾随约束(大于约束)达到限制,此时按钮不会移动得更靠近开关,标签文本开始截断。

enter image description here

有一种情况是按钮设置为隐藏。当标签中有长文本时,这会在标签和开关之间产生额外的间隙。我将按钮的图像设置为nil,并期望它根据约束调整大小,但它永远不会。

enter image description here

以下是试图强制调整大小的代码:

func hideInfoButon(hide: Bool) {
    infoButton.hidden = hide
    if hide {
        infoButton.setImage(nil, forState: .Normal)
    } else {
        infoButton.setImage(UIImage(named: "icn_info_gry"), forState: .Normal)
    }

    setNeedsUpdateConstraints()
    setNeedsLayout()
}

我已经确认正确调用了hide方法,并且图像实际上被设置为nil。我确认没有隐藏按钮并给它背景颜色以使其可见。

是否有解决方案不需要我为按钮添加宽度约束?

内容在tableViewCell中供参考。

2 个答案:

答案 0 :(得分:0)

<强> 1。将约束添加到标签

enter image description here

<强> 2。将约束添加到信息按钮

enter image description here

第3。信息按钮尾随空格必须是标准间距

enter image description here

<强> 4。创建信息按钮宽度IBOutlet赞

enter image description here

<强> 5。当你想隐藏按钮设置宽度约束0

infoButtonWidth.constant=0

答案 1 :(得分:-1)

隐藏按钮仍会占用空间。你也可以删除按钮而不是隐藏它......

infoButton.removeFromSuperview()

如果这样做,在删除按钮时,标签和开关之间可能还需要额外的约束。此约束应具有较低的优先级,以便在按钮可见时不会发生冲突。

编辑:

进一步思考,当在行之间重用单元格时,这可能会引起麻烦。您可能会发现为按钮的宽度约束设置IBOutlet更容易,只需将其设置为零即可隐藏。