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

2

尝试自动调整 webview 和 viewcontroller 的视图。或者您也可以在 viewcontroller 的 nib 文件中获取另一个视图并删除默认视图。自动调整该视图的大小并连接到视图插座。

于 2013-05-07T11:23:46.187 回答