UIWebview ScalesPageToFit 页面变小

在使用UIWebView加载含有表格的内容时,设置ScalesPageToFit为YES会导致页面缩小。通过计算body的宽度并重新加载HTML可以解决宽度问题,但会导致无法滚动加载内容。为了解决这个问题,作者采用了创建两个相同大小位置的WebView,一个用于获取宽度,另一个用于实际展示,从而避免了显示异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.webview加载表格遇到了问题,表格超出了当前的视图范围。

2.我设置[_webView setScalesPageToFit:YES];

3.但是自动缩小了。。。FK

4.解决办法是不要[_webView setScalesPageToFit:YES];

5.要计算body的宽度 NSString *bodyWidth= [webView stringByEvaluatingJavaScriptFromString: @"document.body.scrollWidth"];

6.然后重新load一遍html。。。。。but,问题又出现了,如果内容超出了屏幕高度,重新load以后就不能往下滑动加载数据了,方大webview就展示正常了。。。。好诡异。。。。fk

7.so,我创建了2个大小位置一样的webview A和B,A,hide,用来获取宽度,B用于展示真是数据。。

-(void)webViewDidFinishLoad:(UIWebView *)webView
{
    if (webView == self.tmpWebview) {
        //webview中表格太宽,所以这里设置2个webview,一个是临时的webview,用来计算宽度比例,用于真实的webview家在初始化比例
        //js获取body宽度
        NSString *bodyWidth= [webView stringByEvaluatingJavaScriptFromString: @"document.body.scrollWidth"];
        int widthOfBody = [bodyWidth intValue] + 15;
        
        //获取实际要显示的html
        NSString *html = [self htmlAdjustWithPageWidth:widthOfBody
                                                  html:self.htmlBody
                                               webView:webView];
        //加载实际要现实的html
        [self.webView loadHTMLString:html baseURL:nil];
    }
}

//获取宽度已经适配于webView的html。这里的原始html也可以通过js从webView里获取
- (NSString *)htmlAdjustWithPageWidth:(CGFloat )pageWidth
                                 html:(NSString *)html
                              webView:(UIWebView *)webView
{
    NSMutableString *str = [NSMutableString stringWithString:html];
    //计算要缩放的比例
    
    CGFloat initialScale = webView.frame.size.width/pageWidth;
    //将</head>替换为meta+head
    NSString *stringForReplace = [NSString stringWithFormat:@"<meta name=\"viewport\" content=\" initial-scale=%f, minimum-scale=0.1, maximum-scale=2.0, user-scalable=yes\"></head>",initialScale];
    
    NSRange range =  NSMakeRange(0, str.length);
    //替换
    [str replaceOccurrencesOfString:@"</head>" withString:stringForReplace options:NSLiteralSearch range:range];
    return str;
}

参考


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值