1

描画目的でビューの使用可能な領域を知る必要がある iPad アプリを作成しています。ビューはナビゲーション コントローラーに追加されるため、ステータス バーとナビゲーション コントローラーの両方が特定のピクセル数を占有します。私のアプリはたまたま横向きになっていますが、それは関係ないと思います。

didRotateFromInterfaceOrientation を使用して、回転後に正しいビュー サイズを取得できます。しかし、画面を回転させずにそれを行う方法がわかりません。

 - (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    [self.view setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    NSLog(@"drfi %d %d", (int)self.view.frame.size.width, (int)self.view.frame.size.height);

}

^^回転後に機能します。前ではありません。正確な数値を取得する方法がわかりません。そして、私は本当にこれを配線したくありません。

また、この機能をデバイスに依存しないようにする必要があります。これは、古い iPad の解像度だけでなく、新しい iPad でも機能するはずです。正確な使用可能な領域がわかれば、スケーリングの問題を処理できます。なぜこれが難しいのですか?ヘルプ!!

4

4 に答える 4

1

didRotateFromInterfaceOrientation 内でフレームのビューを指定する必要はないと思いますが、ビューの向きに応じて自動的にサイズが変更されるように、ビューの自動サイズ変更マスクにいくつかのプロパティを設定することをお勧めします。

たとえば、ビューがロードされたときにこれをビューに設定する (viewDidLoad メソッド):

self.view.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;

ビューの幅と高さが自動的に変更され、そこから必要な適切な値を取得できるように指定します。

これを読む必要があります : http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/CreatingViews.html#//apple_ref/doc/uid/TP40009503-CH5-SW1 iOS でのビューの理解

編集

また、おそらくあなたは、あなたのデバイスの向きが何であるかを見つけたいと思うでしょう。[[UIApplication sharedApplication] statusBarOrientation];

于 2012-05-18T00:59:21.250 に答える
1

あなたのアプリケーションは次のようになります: スタートアップ ビューがあり、このビューでメイン ビューを読み込んでウィンドウに追加しますよね? 次に、メイン ビューで以下のようにする必要があります。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        CGRect frame = self.view.frame;
        frame.origin.y = frame.origin.y + 20.0;
        self.view.frame = frame;
    }
    return self;
}
于 2012-05-18T01:56:30.130 に答える
1

これは、インスタンス メソッドとカテゴリ メソッドを組み合わせることで動的に取得できます。

インスタンス方法:

これは、ビュー コントローラー (自己) がナビゲーション コントローラー内に埋め込まれていることを前提としています。

-(int)getUsableFrameHeight {
  // get the current frame height not including the navigationBar or statusBar
  return [MenuViewController screenHeight] - [self.navigationController navigationBar].frame.size.height;
}

クラス カテゴリ メソッド:

+(CGFloat)screenHeight {
    CGFloat screenHeight;
    // it is important to do this after presentModalViewController:animated:
    if ([[UIApplication sharedApplication] statusBarOrientation] == UIDeviceOrientationPortrait ||
        [[UIApplication sharedApplication] statusBarOrientation] == UIDeviceOrientationPortraitUpsideDown){
        screenHeight = [UIScreen mainScreen].applicationFrame.size.height;
    } else {
        screenHeight = [UIScreen mainScreen].applicationFrame.size.width;
    }
    return screenHeight;
}

上記は、縦向きと横向きの両方で、ステータスバーとナビゲーションバーが削除された後の使用可能なフレームの高さを一貫して提供します。

注: クラス メソッドは、ステータス バーの 20 ポイントを自動的に差し引きます。次に、ナビゲーション ヘッダー変数の高さ (横向きの場合は 32 ポイント、縦向きの場合は 44 ポイント) を引きます。

于 2014-08-18T21:12:14.133 に答える