2011-08-13 8 views
0

画面の一番下に揃え、幅が画面を満たす必要があるビューを考えてみましょう。フレームが向きに依存するビューをレイアウトする方法

さらに、ビューの高さは向きによって異なります。ポートレートの向きでは、ビューの高さは200ピクセルでなければならず、ランドスケープでは高さは100ピクセルでなければなりません。

親ビューのサイズについて何も仮定せずにこれを行うには、(ステータスバーを持っているかどうかわからない、タブバーがあるなどの理由で)これを行う最善の方法は何ですか?

これは動作しません。私の現在のコードです:以下に示すよう

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    myView = [[UIView alloc] init]; 
    CGSize myViewSize = CGSizeMake(self.view.frame.size.width, 200); 
    // Align bottom 
    float myViewY = self.view.frame.origin.y + self.view.frame.size.height - myViewSize.height; 
    myView.frame = CGRectMake(0, myViewY, myViewSize.width, myViewSize.height); 
    myView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin; 
    myView.backgroundColor = [UIColor redColor]; 
    [self.view addSubview:myView]; 
} 


- (void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration]; 
    BOOL landscape = UIInterfaceOrientationIsLandscape(toInterfaceOrientation); 
    myView.frame = CGRectMake(myView.frame.origin.x, myView.frame.origin.y, myView.frame.size.width, landscape ? 100 : 200); 
} 

答えて

0

はUIWindowオブジェクトを使用してみてください:

[[UIApplication sharedApplication] keyWindow].screen.applicationFrame.size.height 
applicationFrameため

アップルのドキュメントは以下のように読み取ります

このプロパティには、画面の境界からステータスバーが占める領域を引いた値(表示されている場合)が含まれます。アプリケーションの初期ウィンドウサイズを取得するには、このプロパティを使用することをお勧めします。矩形は点で指定されています

+0

上記の例では、画面フレームの使い方を詳しく説明できますか? – hpique

+0

また、ツールバーやタブバーがあればどうなりますか? – hpique

関連する問題