0

UIViewController に webview を追加しました。サイズをUIViewControllerのビューに合わせることができると思いましたが、すぐにUIControllerViewフレームが画面の向きとは無関係であることに気付き、縦向きモードのようにフレームを表示しました(画面が風景で)。UIInterfaceOrientationIsPortrait()デバイスが平らに横たわっている場合、画面が横向きに回転されていても、デバイスが縦向きであると報告されるため、うまくいきません。

この問題を回避するために、ステータス バーの向きを確認し、UIScreen の境界 (回転とは無関係) を使用して現在のフレームを計算し、表示されている場合はステータス バーのサイズを削除しました。

CGRect frame = [UIScreen mainScreen].bounds;

BOOL isPortrait;
UIDeviceOrientation orientation = (UIDeviceOrientation)[[UIApplication sharedApplication] statusBarOrientation];
    if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown) {
        isPortrait = YES;
    }
    else {
        isPortrait = NO;
    }

    if (!isPortrait) {
        frame = CGRectMake(frame.origin.x, frame.origin.y, frame.size.height, frame.size.width);
    }

if ([UIApplication sharedApplication].statusBarHidden) {
        return frame;
    }
    else {
        return CGRectMake(frame.origin.x,
                          frame.origin.y,
                          frame.size.width,
                          frame.size.height - 20);
    }

UIWebView を自動サイズ変更用に設定しても、UIViewController のビューのフレームは回転に依存しないため、変更されないため、UIWebView は回転時にフレームを正しく変更しません。

(奇妙なことに、UIViewController ビュー フレームが変更されていないにもかかわらず、ビューは実際には正しくサイズ変更されます)

サイズを変更したメソッドを使用してみましたdidRotateFromInterfaceOrientation:が、すべての回転アニメーションが完了した後でのみです。

を使用willRotateToInterfaceOrientation:duration:すると、以前と同じ問題が発生しUIInterfaceOrientationIsPortrait()ます。これは、向きを正しく反映したものではありません。

誰かがこれを行うことができましたか?

4

1 に答える 1