1

別のUIViewControllerをプッシュするUINavigationControllerがあります。このUIViewControllerでは、ポートレートモードではUITableViewを表示し、横長モードでは別のビューを表示します。UIViewController画面が表示されない

したがって私のviewDidLoadでは、私はUIViewを作成して、これに2つのViewControllerを追加しています。私の問題は、それがロードされるとき、私は上に次の白いマージンを得ることです。 example

私はこれが(以下私のステップ3で)ためであると考え

CGRect appFrame = [[UIScreen mainScreen] applicationFrame]; 
[[self view] setFrame:appFrame]; 

は、フルスクリーンを返し、マイナスナビゲーションバーされていません。これは正しいですか?もしそうなら、どうすれば白いマージンがないようにフルサイズで返すことができますか?

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Step 1 - Set up the tableDataView for vertical layout 
TableDataViewController *tableController = [[TableDataViewController alloc] init]; 
self.tableDataViewController = tableController; 
[tableController release]; 

// Step 2 - Set up the graphView for horizontal layout 
GraphViewController *graphController = [[GraphViewController alloc] 
    initWithNibName:@"GraphViewController" bundle:nil]; 
self.graphViewController = graphController; 
[graphController release]; 

// Step 3 - Get the screen size 
CGRect appFrame = [[UIScreen mainScreen] applicationFrame]; 
[[self view] setFrame:appFrame]; 

// Step 4 - Add the vertical view to the containerView 
//  and then add the containerView to this controller 
containerView = [[[UIView alloc] initWithFrame:appFrame] autorelease]; 
[[self view] addSubview:containerView];      
[containerView addSubview:[tableDataViewController view]]; 

// Step 5 - Add to the active view so we can test for it later 
activeView = [tableDataViewController view];  
} 

感謝

マイク

答えて

2

私はあなたのフレームオフセットに問題があると思います。ナビゲーションバーを有効にしてappFrameに入るrectは44.f(ナビゲーションバーの高さ)のyオフセットを持ちます - NSLogでチェックし、それが正しいかどうか確認してください。

原点に配置されるビューのフレームを設定するので、xとyの原点をゼロに設定する必要があります。あなたは、私が[UIScreen mainScreen]のboundsプロパティを使用すると、より全体的な解決策になるかもしれないと思う実際に

CGFloat navHeight = navController.navigationBarHidden ? 0 : 
    navController.navigationBar.frame.size.height; 

をチェックすることにより、より安全な方法でこれを行うことができます。原点とサイズが正しく設定されているので、ナビゲーションバーの存在を確認する必要はありません。何が起こっているのか

チェック:

CGRect screenBounds = [[UIScreen mainScreen] bounds] 
NSLog(@"%@", NSStringFromCGRect(screenBounds)); 
CGRect screenFrame = [[UIScreen mainScreen] applicationFrame] 
NSLog(@"%@", NSStringFromCGRect(screenFrame)); 
+0

のようなものでなければなりませんので、あなたは、カスタムビューを埋めたい:Screenbounds {{0,0}、{ 320,480}}、スクリーンフレーム{{0,20}、{320,460}}。理想的には、[[UIScreen mainScreen] bounds]を使って最大サイズを取得する必要があります。しかし、私はこれを行い、ナビゲーションバーの下に白い余白が残っています。それはそれを完全に無視しているようです。マイク。 – hydev

+0

私はちょうどこれを使って遊んでいて、** CGRect appFrame **を設定したものを完全に無視しているようです。私はちょうどCGRectMake(0,0,20,20)と違いはありませんでした。 tableControllerとgraphControllerは何らかの形で動作します。 – hydev

0

はカップルの事が起こってあります。とりわけ、frameは、ビューの位置を、スーパービューの座標系に記述する。

containerViewは、カスタムビューのサブビューとして追加され、その座標系の起点はアプリケーションフレームではなくナビゲーションバーの下に表示されます。

私はあなたが、私は次のことを得る上で示唆何をするときcontainerViewのフレームが

CGRectMake(0.0, 0.0, self.view.bounds.width, self.view.bounds.height);

関連する問題