UIWebView的几个小技巧

一. 在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?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值