2013-01-12 39 views
2

是否有可能在UIViewController中的ViewDidLoad()之前設置Frame?iOS Monotouch - 如何在ViewDidLoad()之前設置Frame?

目前,我這樣做是在構造函數中:

View.Frame = _frame; 

的問題是,這個呼叫會自動首先觸發的viewDidLoad()函數。 在ViewDidLoad()我放置我的子視圖依賴於「View.Frame」屬性。

但是,此屬性僅在ViewDidLoad()完成後纔會更改。 所以基本上「View.Frame = _frame;」首先用舊的「Frame」值觸發「ViewDidLoad()」,並且只在該屬性改變之後觸發。

我可以通過首先爲「_frame」分配一個類變量並在「ViewDidLoad()」中使用該變量來解決這個問題,但是我想查看是否有另一個解決方案,以及是否在這裏丟失了某些東西。 (我也錯過了這個流程背後的想法)

回答

2

這是iOS上的常見情況,我會說你正在爲你的構造函數做正確的事情。調用View屬性上的獲取器將加載該視圖,因此它們提供IsViewLoaded屬性來檢查這一點。

如果不是你在哪裏傳遞框架構造函數,你也可以做這樣的事情在你的控制器:

public void SetFrame(Frame frame) 
{ 
    if (IsViewLoaded) { 
     View.Frame = frame; 
    else { 
     _frame = frame; 
    } 
} 

由於此場景中,它可能是值得考慮您的設計。我不知道整個情況,但是你的控制器能否在課堂上決定它的Frame?也許你可以通過另一個價值,那就是讓你在ViewDidLoadFrame中做數學計算,這樣可以更好地匹配蘋果的模式。

相關問題