2017-04-08 67 views
0

有一個按鈕,調用下面的代碼:更改的UILabel文本及定位同時不工作

algHeaderLabel.frame = CGRect(
    x: algHeaderLabel.frame.origin.x, 
    y: algHeaderLabel.frame.origin.y + 400, 
    width: algHeaderLabel.frame.size.width, 
    height: algHeaderLabel.frame.size.height 
) 
    algHeaderLabel.text = "chorus" 

當我按下按鈕,文本更改爲「合唱」,但標籤不改變位置。但是,當我第二次按下按鈕時,位置會更新。

我也嘗試了一下,發現如果我這樣做:

DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3) { 
    algHeaderLabel.text = "chorus" 
} 

標籤的位置將更新,3秒後文本將更新,但也將返回標籤到它的原始位置!

任何幫助將不勝感激!

+0

您的問題缺乏上下文。顯示更多的代碼。清楚說明如何以及何時調用此代碼。看來您在刪除的問題中有更多信息。更新這個問題與一些信息,如果它是相關的。 – rmaddy

回答

0
algHeaderLabel.translatesAutoresizingMaskIntoConstraints = true 

這似乎是通過關閉自動佈局的UILabel或任何UIView來完全解決這個問題。

根據Apple的文檔translates​Autoresizing​Mask​Into​Constraints,默認情況下,它會自動設置爲true,以編程方式創建任何視圖,false用於在IB中創建的任何視圖。這讓我感到困惑,因爲我以編程方式創建了標籤,並且沒有任何限制,所以我最好的猜測是,因爲 UILabel是在IB中創建的子視圖,所以視圖控制器的所有子視圖都可以默認設置爲false這個這個自動佈局屬性...

在任何情況下,我UILabel設置translates​Autoresizing​Mask​Into​Constraintstrue正是解決了這個問題對我來說。