为了账号安全,请及时绑定邮箱和手机立即绑定

如何在可变高度UITableView内基于内容确定UIWebView高度?

如何在可变高度UITableView内基于内容确定UIWebView高度?

iOS
梦里花落0921 2019-12-10 10:38:47
我正在尝试创建一个UITableView高度可变的行,如该问题的答案中所述我的问题是每个单元格包含一个UIWebView具有不同(静态加载)内容的内容,我无法弄清楚如何根据该内容计算适当的高度。有没有办法做到这一点?我已经尝试过像这样的事情:   (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {       WebViewCell *cell = (WebViewCell*)[self tableView:tableView cellForRowAtIndexPath:indexPath];       [cell setNeedsLayout];       [cell layoutIfNeeded];       return cell.bounds.size.height;    }单元格本身是从笔尖加载的,而笔尖只是一个UITableViewCell包含的UIWebView。(虽然可变高度会更好,但是如果单元格只是将自身调整为最大的html内容也可以)。
查看完整描述

3 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

很高兴找到您的答案,JavaScript技巧对我来说效果很好。


但是,我想说的还有“ sizeThatFits:”方法:


CGSize goodSize = [webView sizeThatFits:CGSizeMake(anyWidth,anyHeigth)];

我们必须将首选大小设置为零,但除此之外,它通常总是有效的!


通常,因为使用UIWebViews,它似乎仅在第二次加载时起作用(我使用“ loadHTMLString:”方法,是的,我从委托“ didFinishLoad:”方法中调用“ sizeThatFits:”)。


因此,这就是为什么我很高兴找到您的解决方案在任何情况下都有效的原因。


查看完整回答
反对 回复 2019-12-10
?
MM们

TA贡献1886条经验 获得超2个赞

这似乎有效。目前。


- (void)webViewDidFinishLoad:(UIWebView *)webView

{

    CGFloat webViewHeight = 0.0f;

    if (self.subviews.count > 0) {

        UIView *scrollerView = [self.subviews objectAtIndex:0];

        if (scrollerView.subviews.count > 0) {

            UIView *webDocView = scrollerView.subviews.lastObject;

            if ([webDocView isKindOfClass:[NSClassFromString(@"UIWebDocumentView") class]])

                webViewHeight = webDocView.frame.size.height;

        }

    }

}

如果失败,它应该安全地返回0。


查看完整回答
反对 回复 2019-12-10
  • 3 回答
  • 0 关注
  • 534 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信