【问题标题】:Calculate UIWebView height depending on its content根据其内容计算 UIWebView 高度
【发布时间】:2023-04-10 17:44:02
【问题描述】:

我有一个名为Announcement 的类,它有一个Title (NSString)、一个Publishing Date (NSString) 和一个Body (NSString 带有HTML 内容)。

我想以与电子邮件应用程序类似的方式显示它。当您阅读电子邮件时,您会看到前三个“行”(发件人、收件人、标题[日期]),然后是电子邮件的内容。

我只想创建“Title[date]”行,然后是正文。我想它是一个UITableView,它在第一个单元格上有我的Title,在第二个单元格上有一个UIWebView

但似乎单元格的高度与UIWebView 的高度完全相同,所以我的问题是:

如何根据我的Body 计算我的UIWebView 的高度?因为基本上垂直滚动时滚动整个UITableView,而水平滚动时仅滚动UIWebView 内容。

谢谢

【问题讨论】:

标签: iphone uitableview uiwebview


【解决方案1】:

在 webview 委托方法中,只需尝试以下代码:

- (void)webViewDidFinishLoad:(UIWebView *)webView{
    [webviewTopicDesc sizeToFit];
    [webviewTopicDesc setFrame:CGRectMake(webviewTopicDesc.frame.origin.x, webviewTopicDesc.frame.origin.y, 300.0, webviewTopicDesc.frame.size.height)];
}

在此之前,将 webview 高度设为 5.0。

希望对您有所帮助。

这里可以根据字符串获取动态高度。

-(CGSize)getDynemicHeight:(int)pintFixWidth :(NSString *)pstrText
{
CGSize maximumSize=CGSizeMake(pintFixWidth, g_Max_Width);
UIFont *myFont = [UIFont fontWithName:g_Default_Font_Name size:g_Default_Font_Size];// font used for label
myFont=[UIFont boldSystemFontOfSize:g_Default_Font_Size];

CGSize sizeS = [pstrText sizeWithFont:myFont 
                   constrainedToSize:maximumSize 
                       lineBreakMode:UILineBreakModeWordWrap];

sizeS.height=sizeS.height+39;

return sizeS;
}

这里,你必须用字体样式来固定宽度和字体大小。

可能对你有帮助。

【讨论】:

  • 它可以工作,但我想要最小的内容大小(或缩放比例)。基本上,当我加载网络视图时,我想显示全部内容。
  • 我已经更新了我的答案并添加了函数来获取基于字符串长度的动态高度。希望对你有所帮助。
【解决方案2】:

有几种方法可以找到UIWebView 内容的高度。

以下是一些建议:

How to determine UIWebView height based on content, within a variable height UITableView?

How to determine the content size of a UIWebView?

iPhone - get the Content Size of UIWebView

请注意,在UITableView 中使用UIWebView 不一定是一个好主意,特别是当您在同一个UITableView 中滚动浏览多个Announcements 时。如果您在每个UITableView 中只显示一个公告,您应该能够侥幸逃脱,但对于包含大量单元格的表格需要滚动,在单元格中使用 webviews 可能会导致性能问题。

Apple 还建议不要使用嵌入 UIWebViews / UITableViews / UIScrollViews

来自UIWebView Class Reference

重要提示:您不应将 UIWebView 或 UITableView 对象嵌入 UIScrollView 对象。如果这样做,可能会导致意外行为 因为两个对象的触摸事件可能会混淆和错误 处理。

我的 2 美分 :)

【讨论】:

  • 我想要最小的内容大小(或缩放比例)。基本上,当我加载 Web 视图时,我想显示全部内容。
  • 在这种情况下,您需要将UIWebViewscalesPageToFit 属性设置为TRUE
  • 我希望我的 UIWebView 具有以下 frame=CGRectMake(0,0,320,height),并且我希望内容具有完全相同的“宽度”(320)并相应地调整它的高度.例如,如果我禁用 scalesPageToFit,并为我的 UIWebView (0,0,320,480) 创建一个框架,则内容水平固定,我只能垂直滚动。我想要类似的东西,只是我希望已经根据内容的高度设置了高度。而且,我也希望能够缩放,但如果我设置 scalesPageToFit 那么最初的内容不适合我的宽度。抱歉没有让自己清楚。
  • 只要您在表格中创建UIWebView 而不“启用用户交互”,就可以嵌入它们。正如您的摘录中所述,问题来自处理触摸事件。除此之外......没有其他简单的方法来呈现html。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-16
  • 2010-10-19
  • 2012-10-06
  • 2019-07-16
  • 2016-02-23
  • 1970-01-01
相关资源
最近更新 更多