2013-02-26 63 views
1

被重寫,我有以下代碼:代碼由故事板

- (void) awakeFromNib 
{ 
    CGRect temp = self.buttonOne.frame; 
    temp.origin.y += 50; 
    self.buttonOne.frame = temp; 
} 

代碼內部無所事事;當應用程序加載buttonOne正好在故事板上的位置時。

如果我把裏面viewDidLoad中相同的代碼這樣:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    CGRect temp = self.buttonOne.frame; 
    temp.origin.y += 50; 
    self.buttonOne.frame = temp; 
} 

它的工作原理和按鈕向下移動。

這是因爲在awakeFromNib射擊和正在繪製的視圖之間發生了什麼?

任何澄清將是偉大的!

回答

1

awakeFromNib將在控制器從nib文件取消存檔時被調用,而viewDidLoad將在創建與控制器綁定的視圖時被調用。因此awakeFromNib將在viewDidLoad之前被調用。當awakeFromNib被調用時,視圖尚未被加載(如果已經調用了viewDidLoad),因此對它的任何更改都不會影響它。

+0

因此,當awakeFromNib被調用時,應用程序對任何視圖的座標一無所知,並且它所做的任何更改都將被覆蓋? 調用哪個函數來設置故事板中視圖的初始座標? – Bassel 2013-02-26 21:21:23

+0

@Bassel當awakeFromNib被調用時,視圖並不存在,因爲它尚未被加載,所以你所做的任何更改都不會執行任何操作。當調用viewDidLoad時,初始座標將是已知的,請注意,這可能與最終座標不同,因爲視圖調整大小以適應控制器的內容。 – 2013-02-26 21:25:19

+0

以及我禁用視圖自動調整和禁用自動佈局,所以這不應該發生,我輸入viewDidLoad時的座標將有望成爲最終的座標,將被顯示。感謝你的回答! – Bassel 2013-02-26 21:28:48