2010-08-27 284 views
7

我有一些文字需要显示在我的应用程序中。该文本包含需要交互的链接。我试过在UITextViewsUILabels中制作可点击链接的一些解决方案。根据内容字体大小动态调整UIWebView的尺寸

  1. UITextView链接

    • UITextView提供数据检测该拿起的网址,让他们可点击。
    • 我无法使用,因为链接只能在Safari中从外部打开,因此无法控制并按照链接执行操作。使用“花式标签”(http://furbo.org/2008/10/07/fancy-uilabels/

      • 几乎完美的解决方案,链接提供的检测和用户的方式来查看和在线挖掘他们给了我完全控制
    • UILabel链接按下时如何处理链接。

    • 当前无法使用,因为实现使用UIButton s来覆盖链接,并且它们不包含长链接上的文本。

最后我决定使用webview。我将文本传递到webview中,并在其周围构建一个基本的HTML包装器,并且所有内容都是hunky-dory。这与Twitter for iPhone(又名Tweetie)使用的方法相同。

我现在唯一的问题是,如果文本太长,web视图剪辑溢出并滚动查看剪切的文本。其次,如果文字太短,那么webview下面会有大面积的浪费空间。

与Tweetie不同,我在webview下面有更多的内容,我想避免滚动溢出或浪费的空间。 webview无论如何都是滚动视图的子视图,所以整个页面的内容可以增长而不需要滚动子视图。

有没有什么办法可以动态调整webview的大小,使其基于它的内容只是正确的高度?

我到目前为止已经试过很多事情,似乎没有什么是固溶体:

  • sizeToFit什么也不做(或者更可能只是将大小设置为当前帧是什么反正)。
  • sizeThatFits:无论如何返回其当前大小。
  • NSStringsizeWithFont:constrainedToSize:是不可行的,因为UIWebViewUIFont有不同的表示大小为18。
    • 只是为了详细说明这一点。在我的测试中,我发现一个scaleFactor为1.0和scalesPageToFit的webView设置为NO,并且整个页面的字体大小设置为13.5pt(在CSS中)呈现与UILabel相同大小的文本,其中UIFont如果有人能解释我,我会很感激。
  • 此外,在webView中,我使用CSS属性word-wrap: break-word;以防止webView水平滚动长词或URL。正因为如此,webView和UILineBreakModeWordWrap之间的包装行为完全不同。即使使用UILineBreakModeCharacterWrap也不会产生相同的结果。

无论如何没有办法做到这一点,或者我是愚蠢的,缺少一些简单的东西。如果有人能提供一些见解,我会非常感激。谢谢。

回答

1

我找到了解决我的问题在http://www.iphonedevsdk.com/forum/iphone-sdk-development/1388-getting-actual-content-size-uiwebview.html

我不认为这是最好的解决办法,但它的工作。如果任何人有更好的想法,我会很高兴听到他们。

我结束了在我的webView上运行该javascript在webViewDidFinishLoad:。我有一个div元素包裹我的内容被称为身体,所以我的代码如下所示:

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    NSString *string = [_webView stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"body\").offsetHeight;"]; 
    CGFloat height = [string floatValue] + 8; 
    CGRect frame = [_webView frame]; 
    frame.size.height = height; 
    [_webView setFrame:frame]; 

    if ([[self delegate] respondsToSelector:@selector(webViewController:webViewDidResize:)]) 
    { 
     [[self delegate] webViewController:self webViewDidResize:frame.size]; 
    } 
} 

我不得不垫高度略高的原始值​​没有考虑到保证金大小等

当我得到身高后,我打电话给我的代表,webview调整大小,以便布局可以完成。

3

其实,你可以使用-sizeThatFits:一个小技巧。见my response也有类似的问题。

+0

看起来不错,当我下一步需要这样做时,我会尝试一下。 – Jasarien 2010-12-03 16:03:08

相关问题