1

私のアプリには、各ビューに 3 つのボタンと 1 つの画像ビューがあります。ボタンと画像のサイズ、およびナビゲーション バーとタブ バー コントローラーのサイズが原因で、ランドスケープ モードですべてを小さくするためにサイズ変更が必要でした。次のコードを入れました。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{

if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight)
{
    viewofimage.frame = CGRectMake(130, 45, 220, 115);
    share.frame = CGRectMake(205, 161, 70, 70);
    invite.frame = CGRectMake(8, 161, 70, 70);
    contact.frame = CGRectMake(402, 161, 70, 70);
    invitation.frame = CGRectMake(3, 227, 81, 21);
    sharing.frame = CGRectMake(200, 227, 81, 21);
    contacting.frame = CGRectMake(397, 227, 81, 21);
}
else
{
    viewofimage.frame = CGRectMake(20, 64, 280, 206);
    invite.frame = CGRectMake(8, 285, 70, 70);
    share.frame = CGRectMake(125, 285, 70, 70);
    contact.frame = CGRectMake(242, 285, 70, 70);
    invitation.frame = CGRectMake(3, 358, 81, 21);
    sharing.frame = CGRectMake(120, 358, 81, 21);
    contacting.frame = CGRectMake(237, 358, 81, 21);
}

return YES; 
}

シミュレーターでは、これは完璧に動作し、イメージビューのサイズが変更され、すべてが表示されます。デバイスでは、すべてを右に上に移動するだけです。エラーがコードのどこにあるかについて何か考えはありますか?

4

1 に答える 1

1

このような値をハードコーディングしないでください。回転などのイベントのサイズ変更を処理するには、自動サイズ変更マスクを使用する必要があります。

1つの問題は、デバイスが回転するたびにAutoRotateがキャッシュされ、呼び出されないことである可能性があります。このコードをwill /didrotateメソッドに移動してみてください。

もう1つは、回転が発生する前にこのメソッドが呼び出されるため、フレームが変更されてからデバイスが回転します。デフォルトの自動サイズ変更は、フレームが期待どおりに機能しないことを意味します。

于 2012-08-06T22:02:02.667 に答える