簡體   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