UIWebView无法自动调整以适应屏幕

时间:2010-11-11 23:15:21

标签: iphone objective-c uiviewcontroller autoresize

我有一个使用UIViewController在UIWebView中显示文章的应用程序,其中一些有图像。我进行了设置,以便在点击图像时调用

- (void)displayImage:(NSInteger)i {
ImageViewController * imageVC = [[ImageViewController alloc] initWithImageId:i];
[self.navigationController pushViewController:imageVC animated:YES];
[imageVC release];

}

这会加载另一个UIViewController。 我的所有观点都完全适应轮换。 ImageViewController维护图像的比例,我的ArticleViewController用文本填充屏幕。但是,每当我在查看ImageViewController的同时将屏幕旋转到横向模式并按下后退按钮时。以前的UIViewController不正确地自动调整大小,增加了文本的字体大小,而不是在一行上添加更多的单词。

编辑:

这是一篇文章视图控制器:

This is an article view controller

这是单击图像时出现的ImageViewController:

ImageViewCOntroller - portrait

现在,如果我们改变方向......

ImageViewCOntroller - landscape

然后点击后退按钮,文章内容已经过不当调整以适应窗口。

ArticleViewCOntroller - landscape bad

可以通过转动iPhone两次来解决这个问题。这就是文章在景观中的样子。

ArticleViewCOntroller - landscape good

问题与UIWebView当前不可见时没有适当自动调整有关。我该怎么做才能解决这个问题?

3 个答案:

答案 0 :(得分:5)

您需要在Interface Builder 中执行此操作

单击您的UIWebView并按Apple-3以拉出“Size Inspector”。

在“自动调整大小”下,确保选中内的两个箭头。这将确保视图大小始终最大化到其容器。

答案 1 :(得分:1)

您可以通过根据设备方向添加不同的CSS样式在服务器端更改它: 例如:

/* Landscape */
@media screen and (min-width: 321px)
{   
   body{
     width: 320px;
   }    
}
/* Landscape */
@media screen and (min-width: 321px)
{ 
   body{
     width: 480px;
   }    
}

或者您可以从客户端更改视口: 如果您的网页有视口元标记:

<meta name="viewport" id="view" content="width=320px, minimum-scale=1.0, maximum-scale=1.0">

然后在您的代码中,您可以在每次方向更改时更改此视口:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if(interfaceOrientation == UIDeviceOrientationLandscapeLeft)      
 [uiwebview stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById(\"view\").setAttribute('content', 'width=480');"]];
}
....

并在方向为人像时再次更改

答案 2 :(得分:1)

供将来参考。您可以使用此编程方式执行此操作。

[webView setAutoresizingMask:(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth)];