在UIWebView自动调整到用户方向时遇到问题

时间:2011-04-16 21:07:20

标签: iphone objective-c

我有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)]; 

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:2)

我发现UIWebView做错了,如果它首先呈现为Landscape并切换到Portrait。如果你开始肖像,然后去风景然后回到肖像它有效吗? (它在我的版本中)。

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

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

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

答案 1 :(得分:0)

有时,您可能必须使用方法

 - (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);
}
}

检查self.view和webview的autoresizingMask属性是否设置为YES。