2015-05-25 36 views
-1

我試圖移動標籤的位置,但它不起作用。在iOS中移動標籤的位置8

到目前爲止我所做的是添加一個Label zu我的視圖,爲初始位置添加約束。

within viewDidLoad()我現在想將標籤移動到另一個位置。

基本的想法是有三個標籤,根據某些狀態,改變標籤的順序。

我想這內viewDidLoad中():

var point1 = beacon1Label.center as CGPoint 
var point2 = beacon2Label.center as CGPoint 
var point3 = beacon3Label.center as CGPoint 

beacon3Label.center = point1 
beacon1Label.center = point2 

但位置不會改變。我是否必須禁用約束才能像這樣工作?

回答

0

由於您使用的是約束,而不是調整中心,所以應該調整約束。

0

你不必禁用的約束,但你是絕對正確的約束所涉及。約束定位事物。當佈局發生時,他們得到最後的發言權。因此,您嘗試更改center失敗 - 它確實有效,但在您看到任何內容之前,佈局確實會發生,並且遵守約束條件。

你必須工作你的約束,而不是他們。你的第一個目標應該是首先得到約束!你試圖改變viewDidLoad的位置是一種「難聞的氣味」。這意味着你的限制是錯誤的。

但是,如果你不能做到這一點,出於某種原因,你必須重新東西的代碼,那麼你的代碼必須改變約束,而不是center或視圖的frame

+0

謝謝。你知道一個好的模式如何處理我的問題?這聽起來並不是一種很好的編碼風格,我試圖去做。有什麼更好的想法 – solick

+0

我不知道你的問題_is_。你爲什麼在'viewDidLoad'時間重新排列標籤?這對我沒有意義。但是,如果你必須這樣做,只要按照我所說的去做:改變約束條件。這並不困難。 – matt

+0

在vewDidLoad中移動它們僅用於測試,當然我會在稍後的其他事件中移動它們。 – solick

0

如果您想要像這樣更改中心,則必須刪除約束條件。這種方法不適用於約束條件。如果您想在約束條件下使用相同的方法,您應該在viewDidLayoutSubviewsviewWillLayoutSubviews方法中執行此操作。

+0

我的問題是,我想移動比重新計算一些值之後。應根據內部價值對其進行排序。 – solick