首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >HTML内容适合UIWebview,无需缩小。

HTML内容适合UIWebview,无需缩小。
EN

Stack Overflow用户
提问于 2012-05-19 23:22:03
回答 8查看 79.1K关注 0票数 54

我正在使用UIWebView来呈现一些超文本标记语言。然而,尽管我的网页视图的宽度是320,我的HTML仍然是全宽的,并且可以水平滚动。

我希望实现与原生邮件应用程序相同的功能,即在不缩小的情况下适合该宽度内的所有内容--原生邮件应用程序如何呈现这样的HTML?

更新

我认为使用viewport meta标签会有所帮助,但我无法让它工作。

这就是正在发生的事情:

正如您所看到的,内容不适合设备宽度。我尝试过很多viewport元标签的组合。下面是我尝试Martins建议时发生的情况的一个例子。

原始的超文本标记语言可以在here中找到。

呈现此HTML的方式。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-05-22 21:00:03

下面是你要做的:

在拥有web视图的UI控制器中,将其设置为UIWebViewDelegate。然后,在设置要加载的URL的位置,将代理设置为控制器:

代码语言:javascript
复制
NSString *urlAddress = @"http://dl.dropbox.com/u/50941418/2-build.html";
NSURL *url = [NSURL URLWithString:urlAddress];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[webView loadRequest:requestObj];  
webView.delegate = self;

最后实现webViewDidFinishLoad:来正确设置缩放级别:

此选项适用于iOS 5.0和>

代码语言:javascript
复制
- (void)webViewDidFinishLoad:(UIWebView *)theWebView
{
  CGSize contentSize = theWebView.scrollView.contentSize;
  CGSize viewSize = theWebView.bounds.size;

  float rw = viewSize.width / contentSize.width;

  theWebView.scrollView.minimumZoomScale = rw;
  theWebView.scrollView.maximumZoomScale = rw;
  theWebView.scrollView.zoomScale = rw;  
}

我希望这能帮到你。

选项B,您可以尝试更改HTML (此示例可以完成此工作,但从HTML解析的角度来看并不完美。我只是想说明我的观点。它确实适用于您的示例,并且可能适用于大多数情况。插入的40可能可以通过编程来检测,我没有尝试研究这一点。

代码语言:javascript
复制
NSString *urlAddress = @"http://dl.dropbox.com/u/50941418/2-build.html";
NSURL *url = [NSURL URLWithString:urlAddress];

NSString *html = [NSString stringWithContentsOfURL:url encoding:[NSString defaultCStringEncoding] error:nil];
NSRange range = [html rangeOfString:@"<body"];

if(range.location != NSNotFound) {
  // Adjust style for mobile
  float inset = 40;
  NSString *style = [NSString stringWithFormat:@"<style>div {max-width: %fpx;}</style>", self.view.bounds.size.width - inset];
  html = [NSString stringWithFormat:@"%@%@%@", [html substringToIndex:range.location], style, [html substringFromIndex:range.location]];
}

[webView loadHTMLString:html baseURL:url];
票数 133
EN

Stack Overflow用户

发布于 2013-03-06 14:41:43

只需添加以下内容:

代码语言:javascript
复制
webView.scalesPageToFit = YES;
票数 57
EN

Stack Overflow用户

发布于 2012-05-22 17:50:09

通常,您应该使用viewport元标记。但它的使用是非常不稳定的,主要是如果你想要一个跨平台的网页。

它还取决于你有什么内容和css。

对于我的iPhone主页,它必须自动调整从肖像到lanscape的大小,我使用以下代码:

代码语言:javascript
复制
<meta name="viewport" content="width=device-width; minimum-scale=1.0; maximum-scale=1.0; user-scalable=no">

如果需要特殊调整大小,也可以使用事件:

代码语言:javascript
复制
<body onorientationchange="updateOrientation();">

在你的javascript中使用相应的函数:

代码语言:javascript
复制
function updateOrientation() {
  if(Math.abs(window.orientation)==90)
      // landscape
  else
      // portrait   
}

编辑:

看到你的页面源码,你似乎是用网页编辑器做的,不是吗?

好的,我明白。你的主div的宽度是600px。iphone的屏幕分辨率为320x480。600 > 320,因此它超出了屏幕边界。

现在,让我们进行一些简单的操作:

代码语言:javascript
复制
320 / 600 = 0.53
480 / 600 = 0.8

所以你想要缩小0.5倍的最小值和0.8倍的最大值。让我们更改视口:

代码语言:javascript
复制
<meta name="viewport" content="width=device-width; minimum-scale=0.5; maximum-scale=0.8; user-scalable=no"> 
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10666484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档