`

UIWebView使用技巧(转)

    博客分类:
  • ios
 
阅读更多

参考文章:http://mobilesolutions.blog.163.com/blog/static/189224176201161161110985/

 

 

一. 在UIWebView中使用flashScrollIndicators

使用UIScrollView时,我们可以使用flashScrollIndicators方法显示滚动标识然后消失,告知用户此页面可以滚动,后面还有更多内容。UIWebView内部依赖于UIScrollView,但是其没有flashScrollIndicators方法,但可以通过其他途径使用此方法,如下所示。

for (id subView in [webView subviews]) {
  if ([subView respondsToSelector:@selector(flashScrollIndicators)]) {
    [subView flashScrollIndicators];
  }
}


上述代码片段可以到webViewDidFinishLoad回调中使用,加载完网页内容后flash显示滚动标识。

二.去除UIWebView的背景阴影

假设一个UIWebView是白底黑字的,当用户拖动UIWebView时,会看到后面的背景阴影,如下图所示。

可以使用下述代码去除阴影,并将背景设为白色。

if ([[webView subviews] count] > 0) {
  // hide the shadows
  for (UIView* shadowView in [[[webView subviews] objectAtIndex:0] subviews]) {
    [shadowView setHidden:YES];
  }
  // show the content
  [[[[[webView subviews] objectAtIndex:0] subviews] lastObject] setHidden:NO];
}
webView.backgroundColor = [UIColor whiteColor];


使用此代码后的拖动效果如图所示。

三.根据内容获取UIWebView的高度

有时候需要根据不同的内容调整UIWebView的高度,以使UIWebView刚好装下所有内容,不用拖动,后面也不会留白。有两种方式可根据加载内容获取UIWebView的合适高度,但都需要在网页内容加载完成后才可以,即需要在webViewDidFinishLoad回调中使用。

1.使用sizeThatFits方法。

 

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    CGRect frame = webView.frame;
    frame.size.height = 1;
    webView.frame = frame;
    CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
    frame.size = fittingSize;
    webView.frame = frame;
}


sizeThatFits方法有个问题,如果当前UIView的大小比刚好合适的大小还大,则返回当前的大小,不会返回最合适的大小值,所以使用sizeThatFits前,先将UIWebView的高度设为最小,即1,然后再使用sizeThatFits就会返回刚好合适的大小。

2.使用JavaScript

 

  - (void)webViewDidFinishLoad:(UIWebView *)webView
{
    CGRect frame = webView.frame;
    NSString *fitHeight = [webview stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight;"];
    frame.size.height = [fitHeight floatValue];
    webView.frame = frame;
}


使用UIWebView的stringByEvaluatingJavaScriptFromString方法,执行JavaScript语句document.body.scrollHeight;可获取当前网页正文的全文高,测试时曾错误的使用了document.body.offsetHeight。

3.限制

这两种方法都只能在加载网页完成时才能使用,当在UITableView中的UITableViewCell包含UIWebView时,无法在tableView:heightForRowAtIndexPath:中获取到UIWebView最合适的高度,也就无法确定UITableViewCell的合适高度。 Any Ideas?

分享到:
评论

相关推荐

    UIwebview与js的详细使用

    掌握这些技巧后,便能在iOS应用中更好地利用UIWebView这一强大的工具。需要注意的是,随着技术的发展,Apple已推出了更先进的WKWebView替代UIWebView,因此建议在新项目中优先考虑使用WKWebView。

    UIWebView与 javascript的交互三

    总的来说,“UIWebView与javascript的交互三”这个教程是一个实用的资源,可以帮助开发者熟练掌握在iOS应用中使用`UIWebView`进行原生代码与Web内容交互的技巧,这对于构建混合式应用或在原生应用中嵌入复杂的Web...

    iOS开发之UIWebView

    这篇博客文章“iOS开发之UIWebView”可能详细介绍了如何在iOS项目中使用UIWebView以及其相关的一些实践技巧。 UIWebView的主要功能包括加载HTML、CSS、JavaScript等Web资源,执行JavaScript代码并与Objective-C或...

    iOS中UIWebView网页加载组件的基础及使用技巧实例

    以下是一些关于UIWebView的基础知识和使用技巧: **1. UIWebView的基本用法** UIWebView的创建通常在`viewDidLoad`方法中完成。首先,我们需要初始化一个UIWebView对象,并设置其frame来确定在屏幕上的位置和大小...

    解析自定义头像、链接、处理微博上类似 “@” 和 “#” 的特殊转义字符并在UIWebView显示的例子

    在iOS开发中,UIWebView是苹果提供的一种用于在应用程序中加载和显示网页内容的组件。在本示例中,我们探讨的...理解并掌握这些技巧,将有助于提升你的iOS开发能力,特别是在处理用户生成内容和社交媒体集成的场景下。

    IOS--UIWebView加载进度条(NJKWebViewProgress)

    在iOS开发中,UIWebView是苹果提供的一种用于展示网页内容的控件,它可以加载HTML、CSS、...同时,NJKWebViewProgress的使用也展示了如何通过代理模式和自定义视图来增强原生控件的功能,这是iOS开发中常见的技巧。

    swift-一款UIWebView的加载进度条基于CAShapeLayer

    通过查看这些文件,我们可以学习如何将理论知识应用于实际项目,从而提高Swift开发技能,尤其是关于UIWebView和自定义视图的使用。 总之,这款基于CAShapeLayer的UIWebView加载进度条项目,不仅展示了如何利用Core ...

    完美的UIwebView iOS

    在iOS开发中,UIWebView是苹果提供的一种原生控件,用于在应用程序内展示网页内容。随着技术的发展,UIWebView逐渐被...在实现过程中,理解两者的主要差异和使用技巧至关重要,这将有助于构建更加稳定和高效的iOS应用。

    WebLoadingProgress:UIWebView由于没有WKWebView那么可以可以精准,省资源,性能优越。然后在本demo主要用的加载进度,WKWebView也提供了一个准确的加载进度值属性。estimatedProgress所以UIWebView只能使用一些巧用的方法进行进度的监听,然后进行展示,具体请看两个webView的控制器里的代码

    在iOS开发中,UIWebView和WKWebView是两种用于加载网页内容的重要组件。它们都是苹果提供的WebView框架,但...通过学习这个项目,开发者能够提升自己在WebView使用上的技巧,特别是在资源管理和性能优化方面的理解。

    swift-主流新闻app详情页中所使用的webview和tableview混合开发技巧

    综上所述,混合使用WebView和TableView是新闻App详情页开发中的关键技巧,它需要对Swift UI组件有深入理解,以及对性能优化和用户体验的关注。通过熟练掌握这些技巧,开发者可以创建出功能丰富且用户友好的新闻应用...

    webViewDemo:网易新闻中新闻详情页UIWebView的实现

    综上所述,"webViewDemo"项目不仅展示了如何使用UIWebView呈现网页内容,还涵盖了如何实现自定义图片下载和缓存的高级技巧,这些都是iOS应用开发中不可或缺的技术知识。通过学习和理解这个项目,开发者可以提升在...

    WebViewScript

    4. 使用`UIWebView`代理方法`shouldStartLoadWithRequest`来捕获和处理自定义URL协议的请求。 5. 如何在iOS端解析和响应来自JavaScript的请求。 这些知识对于开发混合型iOS应用或者需要增强`UIWebView`功能的应用至...

    HTML标签实体解析

    HTML标签实体解析是Web开发中的一个重要概念,尤其是在与iOS应用中的UIWebView交互时。...例如,小于号"<"和大于号">... UIWebView是iOS开发中...在实际开发中,理解并掌握这一技巧对于构建高质量的iOS应用至关重要。

    ios-PDF转换器.zip

    7. **iOS开发中的PDF处理**:在iOS中,处理PDF除了使用Quartz 2D之外,还可以利用UIWebView的`-print:`方法直接打印网页为PDF,或者使用Core Graphics框架的PDF上下文来创建和编辑PDF文档。 8. **内存管理和性能...

    WebKit和Chromium源码及原理剖析.pdf

    - 本文介绍了如何使用JavaScript和Canvas API来直接从UIWebView中提取图片数据,而无需再次下载。 - 通过遍历DOM节点找到图片元素,并利用Canvas API绘制出来。 - **实现步骤**: - 获取UIWebView中的DOM节点...

    WebViewJS.zip

    总的来说,`WebViewJS.zip`这个示例项目应该涵盖了如何在iOS应用中加载HTML,以及如何通过`UIWebView`与JavaScript进行有效交互的各种技巧和最佳实践。通过学习这个项目,开发者可以更好地理解如何在原生应用中融合...

    webViewTitle

    在iOS开发中,UIWebView是苹果提供的一种用于展示网页内容的控件,它允许开发者在应用内嵌入HTML页面。...同时,`drawRect:`方法的使用也展示了如何利用Core Graphics进行文本绘制,这是iOS开发中的一个重要技巧。

    图文混排-iOS-Swift

    在iOS中,这通常涉及到对UILabel、UIImageView和UIWebView等控件的使用。 1. **UILabel**: UILabel是iOS中最基本的文本显示控件,但默认情况下不支持图片。为了在UILabel中实现图文混排,我们可以利用 ...

    ios--防照Safari浏览器视图切换效果

    这个效果涉及到的是UIWebView或者WKWebView的使用技巧,以及如何实现平滑的页面过渡。以下将详细介绍这一知识点。 首先,我们需要理解在iOS应用中展示网页内容的两种主要方式:UIWebView(已弃用)和WKWebView。...

    DemoMKWebView

    通过分析DemoMKWebView项目的源代码,我们可以学习到这些优化技巧,并将其应用到自己的项目中。这不仅能够提升应用的性能,还能改善用户体验,尤其是在网络条件不佳或设备性能较低的情况下。同时,这样的自定义实现...

Global site tag (gtag.js) - Google Analytics