2010-03-27 39 views
0

我創建了一個UIViewController子類,並發現UIViewController中-loadView的默認實現會以一種奇怪的方式忽略我的幀大小設置。爲什麼我的視圖控制器視圖不是二次的?

爲了簡化它並確保它不是我的代碼的錯誤,我直接使用UIViewController的簡單實例進行了乾淨的測試,而不是創建子類。結果是一樣的。我儘量讓320×320的確切二次觀點,但似乎認爲像320×200

iPhone OS 3.0,請檢查了這一點:

UIViewController *ts = [[UIViewController alloc] initWithNibName:nil bundle:nil]; 
ts.view.frame = CGRectMake(0.0f, 0.0f, 320.0f, 320.0f); 
ts.view.backgroundColor = [UIColor cyanColor]; 
[self.view addSubview:ts.view]; 

就像你看到的,我這樣做:

1)創建一個UIViewController實例

2)的視圖的幀設置爲320×320

3)給它的顏色的二次尺寸,所以可以發ee it

4)將它作爲子視圖添加。

現在的一部分,這更奇怪的:當我做我自己的實現-loadView的,也就是說,如果我把這個代碼中有這樣的:

- (void)loadView { 
    UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 320.0f)]; 
    v.backgroundColor = [UIColor cyanColor]; 
    self.view = v; 
    [v release]; 
} 

那麼它看起來正確。

現在我們來思考一下:在第一個例子中,我做的幾乎完全一樣,只是讓UIViewController自己創建視圖,然後將其轉換以便更改其框架。對?

那麼,爲什麼我會得到這個奇怪的錯誤?現在我看不出有什麼其他方式來糾正這種錯誤行爲。我沒有激活任何像clipsToBounds,並沒有其他代碼觸及此。

回答

1

不應更改視圖控制器視圖的尺寸。它應該自動調整大小以適應窗口或父控制器的大小。

如果您確實需要方形視圖,請創建子視圖。

// Note: better do this in -loadView or -viewDidLoad. 
    UIView* container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 320)]; 
    [ts.view addSubview:container]; 
    [container release]; 
    // add stuff into the container view. 
    // ... 
+0

如果我手動調整視圖控制器的視圖大小,蘋果是否會拒絕我的應用程序? – dontWatchMyProfile 2010-03-28 12:04:16

+0

@mystify:不需要,因爲視圖控制器可能會以某種未知的方式調整視圖的大小,所以編程很麻煩。 – kennytm 2010-03-28 12:11:36

相關問題