您的位置:首页 > 移动开发

怎样获取UIWebView 的文字的高度

2011-09-23 17:29 281 查看
1最近自己给记搞了个新问题,一段文字是富文本,有很多的复杂的格式,大写,换行,加粗等等,所以必须用uiwenbview 上来加载html 文件来是这样的功能,但是效果要做的又要像用textview 的一样,即感觉是放在一个textview 上的,但是还有图片和视频,而且这个视频必须在必要的时候可以关掉,这样就想出了一个用uiwebview +uibutton +uiscrollview 来实现这样的功能。

2 问题是uiscrollview 是可以滚动的,uiwebview 也是要滚动的,当uiwebView 在uiscrollview 上面的时候 时不好滚动的,当不能完全显示自己的文字的时候交互特别的不好,所以要一下计算出uiwebview 的实际大小,然后设置其正确 的frame,在然后动态的改变uiscrollview 的contentsize 实现类似textview效果

3 难点是怎样计算要加载的html 文件的大小,研究会发现uiwebview 是有个代理的

- (void)webViewDidFinishLoad:(UIWebView *)webView

可以在加载成功数据之后在里面判断html 的高度和宽度,然后调整uiwebview 的大小

那么怎样获得这个大小呢,改变大小的时机找到了,最关键的问题又回来了。

4uiwebView 的布局结构

它的上面会放一个UIWebDocumentView 我们可以获得这个的大小,然后将它传回,在设置uiwebView 的大小 frame;

下面贴一段代码吧

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
CGFloat webViewHeight = 0.0f;
if (webView.subviews.count > 0)
{
UIView *scrollerView = [webView.subviews objectAtIndex:0];//为什么要取第一个?
if (scrollerView.subviews.count > 0)
{
UIView *webDocView = scrollerView.subviews.lastObject;
if ([webDocView isKindOfClass:[NSClassFromString(@"UIWebDocumentView") class]])
{
webViewHeight = webDocView.frame.size.height;//获取文档的高度
webView.frame= webDocView.frame; //更新UIWebView 的高度
aScrollView.contentSize=CGSizeMake(485, 240+webViewHeight);//调整底层的contensize 的大小
}
}
}
}

记得在头文件里加入 <UIWebViewDelegate>,在设置 webView.delegate =self;

去了解控件的组织架构,必要的时刻也是很又用的 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息