繁体   English   中英

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

[英]UIButton size not updating automatically after updating button image, using autolayout

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

在此处输入图片说明

在某些情况下,按钮设置为隐藏。 当标签中有长文本时,这会在标签和开关之间造成额外的间隙。 我将按钮的图像设置为nil,并希望它根据约束来调整大小,但从未成功。

在此处输入图片说明

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

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中供参考。

1.在标签上添加约束

在此处输入图片说明

2.向信息按钮添加约束

在此处输入图片说明

3.信息按钮的尾随空格必须为标准间距

在此处输入图片说明

4.创建信息按钮的宽度IBOutlet像

在此处输入图片说明

5.并且当您wnat隐藏按钮时设置宽度约束0

infoButtonWidth.constant=0

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

infoButton.removeFromSuperview()

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

编辑:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM