2011-02-11 71 views
0

我正在初始化一個新的UIViewCOntroller對象。 然後嘗試設置其視圖的舞臺位置,但我有一些麻煩。UIView框架屬性的錯誤?

這裏是我使用 注意代碼:此代碼放置在應用程序的主UIViewController的viewDidLoad方法

UIViewController * cont = [[UIViewController alloc] init]; 
    cont.view.backgroundColor = [UIColor redColor]; 
    CGRect rect = CGRectMake(100, 0, 320, 480); 
    cont.view.frame = rect; 

這個代碼仍然在(0,0)的定位,而不是(100子視圖, 0) 但是,如果我引入一個小數,例如使用320.01(對於寬度值)或480.01(對於高度值)。該視圖將被正確定位。

看來,如果我使用具有確切寬度的尺寸:320.0高度:480.0, 始發將始終設置爲(0,0)!!!

這有點奇怪。我希望有人能夠解釋爲什麼會發生這種情況,以及可能如何解決問題。

乾杯....

+0

它看起來非常有趣,所以我自己測試了它,但當尺寸恰好爲320和480時,子視圖正確定位在(100,0)處。您可能希望更具體地瞭解如何將視圖控制器視圖添加爲子視圖的哪個視圖。 – MHC 2011-02-11 15:18:06

回答

0

[[UIViewController alloc]init]是錯誤的。 UIViewController的指定初始化程序是initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle。即使這並不一定立即初始化實際UIView的出口。您需要繼承UIViewController並在該子類的viewDidLoad方法中執行自定義。

在此期間很可能viewnil因此您可以嘗試設置您喜歡的任何屬性而不會發生任何事情。

1

NSLog記錄cont.view的值,我想你會發現它是零,這就解釋了爲什麼沒有發生。這不是創建UIViewController的正常方式 - 它不是錯誤以編程方式創建一個,但99.99%的時間UIViewController子類是使用.xib文件中的主UIView創建的。一個新近創建的UIViewController對象有一個無「視圖」的成員,所以你必須以某種方式初始化它,無論是通過加載的.xib:

MyViewController *vc = [[[MyViewController alloc] [email protected]"MyViewController" bundle:nil] autorelease]; 

或手動創建視圖:

MyViewController *vc = [[[MyViewController alloc] init] autorelease]; 
UIView *theView = [[[UIView alloc] initWithFrame:viewframe] autorelease]; 
vc.view = theView; 

然後,您可以將視圖的框架移動到您的內容中,但移動視圖控制器的基本視圖通常不是您想要執行的操作,而是想要創建子視圖並移動它們。

0

我想你應該能夠使用

-(void) loadView { 
    [super loadView]; 
    //create your views programmatically here 
} 

以編程方式創建您的viewController,避免IB。通常情況下,當您的'view'屬性爲零時,IB會爲您調用此方法,但如果您避免IB確保包含上述方法,那麼您的視圖屬性不爲零。