在让UIWebView根据用户方向自动调整大小时遇到问题



我有一个UIWebView,当用户旋转设备时,它会根据用户的方向自动调整大小,代码如下:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
[self.webView setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 

如果用户在查看webView时旋转,则代码工作正常,如果用户在不同的视图(前一个屏幕)中旋转设备,然后导航到我的webView(屏幕),则问题发生,我的webView被切断。我不确定如何根据检测到的方向自动旋转它。我试着把下面的代码放入我的viewDidLoad,但它似乎不工作

[self.webView setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 

我发现UIWebView做了错误的事情,如果它开始与页面呈现为横向和切换到纵向。如果你从竖屏开始,然后切换到横屏,然后再切换到竖屏可以吗?(我的版本是这样的)。

因为你似乎用UIWebView填充了你的整个设备宽度,你应该能够用HTML来修复这个问题。如果这不起作用,那么你可以在JavaScript中设置视口,并在应用程序中设置正确的Frame大小。但是,通过在<head>标签中添加以下内容,页面可以正确地从横向切换到纵向:

   <meta name="viewport" content="width=device-width" />

您也可以设置初始比例或最小/最大,但设置宽度应该足够了。我曾认为这是默认的,但似乎UIWebView有一些东西,它缓存初始渲染的宽度。你仍然需要有自动调整大小的代码,以便UIWebView改变原生大小。

有时,您可能必须使用

方法
 - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
    toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)
{
    webview.frame=CGRectMake(0, 0, 480, 320);
}
else
{
    webview.frame=CGRectMake(0, 0, 320, 480);
}
}

并检查autoresizingMask属性是否为self。

最新更新