【问题标题】:UICollectionView with Cells that contain UIWebViews dynamic resizeUICollectionView 与包含 UIWebViews 动态调整大小的单元格
【发布时间】:2014-10-30 17:40:49
【问题描述】:

我正在寻找一种方法来动态调整 UICollectionView 中的 UICollectionViewCells 的大小。这些单元格包含一个填充有动态 HTML 内容的 UIWebView。因此我以前不知道 webview 的高度。

我试图挂钩func webViewDidFinishLoad(webView: UIWebView) 函数并动态调整它们的大小,但这破坏了整个布局。因为细胞相互生长。

我必须为 iOS 7.1 构建

有人知道吗?

【问题讨论】:

  • 您找到了一个好的解决方案吗?我有相同的问题。我尝试了几种方法,但我相信没有一种标准方法。 iOS-JavaScript 桥是我需要研究的东西。
  • 嗨@Chris 你找到解决方案了吗?

标签: ios swift uiwebview uicollectionview uicollectionviewcell


【解决方案1】:

为 UIWebView 创建高度约束并将约束作为出口添加到 UICollectionViewCell。

重载方法webViewDidFinishLoad:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    // Fit web content size.
    CGRect frame = webView.frame;
    CGRect oldFrame = frame;
    frame.size.height = 1;
    webView.frame = frame;
    CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
    webView.frame = oldFrame;

    // Set content web view height constraint to new content size.
    self.contentWebViewHeightConstraint.constant = fittingSize.height;
}

现在,当 webView 高度约束发生变化时,如果您正确设置约束,单元格高度应该会发生变化。

【讨论】:

  • 我也面临同样的问题。我已经这样做了,但是所有单元格的高度都是可变的,当我滚动列表时,重复使用的单元格需要时间来重新调整到新的大小。
【解决方案2】:

执行以下操作:

  1. 创建一个数组以按索引存储单元格的高度heightArray: [CGFloat]
  2. func webViewDidFinishLoad(webView: UIWebView) 返回时,您可以确定单元格的高度。使用单元格的索引heightArray[indexPath.row] = height 将此高度保存到您的数组中
  3. 致电tableView.beginUpdates()tableView.endUpdates()。这将通过调用func tableView(_ tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 强制表格重新计算单元格的高度
  4. 实现func tableView(_ tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 以返回给定heightArray 的高度

这是在 UITableView 中具有动态单元格高度的一般大纲。试试看。

【讨论】:

  • 谢谢...但我正在寻找 UICollectionViewnot UITableView。我认为集合视图没有heightFor... 方法?
猜你喜欢
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
  • 2014-07-08
  • 1970-01-01
  • 2020-06-26
  • 2021-09-28
  • 2015-09-16
  • 2021-09-15
相关资源
最近更新 更多