2014-10-09 52 views
0

iOS的訂貨行爲在viewDidLoad,我有一個初始設置這樣的 -在viewDidLoad中

// Output all the appropriate text to UITextLabel depending on the state of the app 
[self presentData]; 

// Button sizing 
UIelement.frame=CGRectMake(blah blah blah); 

爲什麼當我在前面的順序做,我得到無大小調整,直到輸出的文本本數據是由另一功能而當我在

UIelement.frame=CGRectMake(blah blah blah); 
[self presentData]; 

的順序,將它的大小適當地開始鍵入代碼再次調用。 我明白訂單很重要,但我想知道的是爲什麼?下一次我遇到這樣的問題時,我該如何去了解爲什麼會發生這種情況?我的猜測是呈現數據,更改uilabel,更新視圖,但出於某種原因,cgrectmake不會更新視圖,而只是更改模型中uilabel框架的值。我對麼?我將如何去尋找這樣的問題的答案,而不必下一次詢問在線社區?

+0

您可以參考'UITextLabel'。我假設你的意思是'UILabel'。後來你提到'UIelement',但評論是關於「按鈕尺寸」的。究竟我們在談論什麼樣的控制? – Rob 2014-10-09 18:43:47

+0

另外,這些控件是如何添加的?以編程方式或通過IB?向我們展示更多代碼... – Rob 2014-10-09 18:50:10

+0

控件是通過界面構建​​器添加的,以@properties和編程方式鏈接。是的,我的意思是uilabel。 – 2014-10-09 19:06:28

回答

0

幾個可能的原因:

  1. 你顯然使用auto layout。使用自動佈局時,設置標籤的text屬性的過程將導致爲視圖重新應用約束。當您手動設置frame時,只有在重新應用自動佈局約束條件(例如,您再次更新UILabel或致電layoutIfNeeded)之前,它纔會保持有效,此時重新計算/調整frame。通常在自動佈局中,人們不會手動調整幀。

  2. 也許presentData打電話sizeToFit,或類似的東西?這顯然也會改變frame

+0

我沒有使用自動佈局。我沒有選中它,因爲它不允許我在沒有未經檢查的情況下改變任何東西的大小。 – 2014-10-09 17:59:48

+0

嗯。自動佈局是我所知道的唯一可以解釋這種行爲的東西。請注意,即使故事板關閉了自動佈局,但如果您有任何以編程方式添加任何約束的代碼,這些約束都會影響行爲。如果這仍然不是,我會建議創建一個能夠重現問題的[MCVE](http://stackoverflow.com/help/mcve)。如果我們不能重現它,那很難提供幫助。 – Rob 2014-10-09 18:37:15

+0

當前數據正在調用sizetofit。我不知道這是如何工作的,我在網上看到一個例子,所以我只是用它而不去查看它。我應該使用它之外的數據,因爲我打電話presentdata很多? (很多時候我只是看到一個函數在線,只是試着看看它是否工作,而不考慮它的工作原理或原理) 編輯「可能不應該那樣做大聲笑」 – 2014-10-09 19:03:08