【问题标题】:How to calculate height of html string before loading into webview in ios 7?在ios 7中加载到webview之前如何计算html字符串的高度?
【发布时间】:2014-07-29 16:18:03
【问题描述】:

我想找到来自 webservice 的 html 字符串的高度。请给我建议最好的解决方案。

提前致谢

【问题讨论】:

  • stackoverflow.com/questions/3936041/… 几乎是您所需要的,我想?我没有关闭作为重复项,因为您问的是仅使用 HTML,我认为这是不可能的。
  • 我想计算html字符串的高度而不将其加载到webview中。
  • 那我觉得你倒霉了。有很多事情会影响渲染和调整大小,如果没有实际渲染和测量,您不太可能解决这个问题
  • 影响高度的因素太多了。除非您想知道 没有 css 和 javascript 的高度,否则我认为这是不可能的(无需重新实现布局引擎)

标签: ios iphone ios7


【解决方案1】:

对此的一种解决方法是将 HTML 加载到 NSAttributedString 并获取它的高度。

NSAttributedString *text = [[NSAttributedString alloc] initWithData:[html dataUsingEncoding:NSUTF8StringEncoding]
                                                            options:@{NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType,
                                                                      NSCharacterEncodingDocumentAttribute : @(NSUTF8StringEncoding)}
                                                 documentAttributes:nil
                                                              error:nil]; // make sure to check for error in a real app

// Then get the bounding rect based on a known width
CGRect textFrame = [text boundingRectWithSize:CGSizeMake(someKnownWidth, CGFLOAT_MAX)
                                      options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
                                      context:nil];

CGFloat height = textFrame.size.height;

我还没有尝试过使用各种 HTML 所以 YMMV。

【讨论】:

    【解决方案2】:

    我之前不得不处理网页视图高度计算问题。我在这里可以说的是:如果不将 HTML 字符串加载到 Web 视图并在渲染后查看它的实际高度,就不可能计算出它的高度。您可能需要考虑的另一件事是在 HTML 内容中包含 Javascript 或隐藏元素的可能性。

    【讨论】:

      【解决方案3】:
      -(void)webViewDidFinishLoad:(UIWebView *)webView
      {
          float contentSizeForWebview = webView.scrollView.contentSize.height;
      }
      

      【讨论】:

        【解决方案4】:

        您可以使用以下函数计算高度:

        -(CGSize)GetTextHightForLable:(NSString*)strText
        {
            UILabel *gettingSizeLabel = [[UILabel alloc] init];
            gettingSizeLabel.font = [UIFont fontWithName:@"GillSans-Light" size:13.0f]; // set same fond and size that used in your html string
            gettingSizeLabel.text = strText;
            gettingSizeLabel.numberOfLines = 0;
            CGSize maximumLabelSize = CGSizeMake(270, MAXFLOAT); // 270 is a width you must set same width of you webview this width will be as per your requirement
            CGSize expectedSize = [gettingSizeLabel sizeThatFits:maximumLabelSize];
            return expectedSize;
        }
        

        所以你可以通过以下方式获得hegith:

         CGSize HTMLTextHeight =[self GetTextHightForLable:yourString];
         CGFloat height = HTMLTextHeight.size.height;
        

        【讨论】:

          猜你喜欢
          • 2023-03-24
          • 2023-03-18
          • 2012-11-28
          • 2014-12-09
          • 2019-08-13
          • 2020-09-01
          • 2017-06-04
          • 2014-04-26
          • 1970-01-01
          相关资源
          最近更新 更多