编辑 tableview Swift 的行高

Posted

技术标签:

【中文标题】编辑 tableview Swift 的行高【英文标题】:Edit the row height for tableview Swift 【发布时间】:2015-04-15 08:11:43 【问题描述】:

在 tableView 中我有一个 web 视图,高度单元格应该等于 webView,我尝试通过以下代码编辑单元格的行高:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
    let cell = tableView.cellForRowAtIndexPath(indexPath) as ActivitiesCell

    return cell.webView.scrollView.contentSize.height

但我在初始化 var 单元格时遇到了这个异常:“线程 1:EXC_BAD_ACCESS(code=2,address=0x306d2c): 那么如何根据 webview 高度使单元格的高度动态化? 谢谢。

【问题讨论】:

【参考方案1】:

EXC_BAD_ACCESS 的原因是您试图访问 tableView 的 heightForRowAtIndexPath: 方法中的单元格。该单元格尚未创建且不存在。

tableview 调用heightForRowAtIndexPath: 方法后跟cellForRowAtIndexPath: 来创建单元格。

首先调用heightForRowAtIndexPath: 以获取索引路径处单元格的高度。在调用此cellForRowAtIndexPath: 之后,会在其中为相应的索引路径创建单元格。

由于在cellForRowAtIndexPath: 中创建了单元格,并且在此之前调用了heightForRowAtIndexPath:,因此您无法访问那里的单元格(因为它尚未创建,否则EXC_BAD_ACCESS 如上所述)。为了返回相应索引路径的单元格的动态高度,您应该根据数据模态计算高度,而不是尝试访问单元格。

【讨论】:

你的意思是创建一个 webView 变量,并尝试计算它的高度,然后为 heightForRowAtIndexPath 返回这个高度?? 如果您能够仅使用 heightForRowAtIndexPath: 中的数据计算单元格的高度,那么您应该在此处计算高度,否则插入检查是否(动态高度计算)返回单元格DynamicHeight 否则返回默认高度。返回默认高度后,在 cellForRowAtIndexPath: 内创建单元格并在那里创建 web 视图,让内容加载成功时正在加载的内容,而不是根据内容计算高度,更新 modal 并重新加载相应的行。 重新加载对应的行会从heightForRowAtIndexPath返回这次动态计算的高度: 你有关于单元格动态高度的例子吗? 详细教程可以参考raywenderlich.com/87975/…

以上是关于编辑 tableview Swift 的行高的主要内容,如果未能解决你的问题,请参考以下文章

奇怪的行为设置 tableView 行高和 scrollPosition Swift

对于选定的行,将行高设置为 0 (swift)

如何正确更改 TableView 的行高?

Swift - tableView 行高仅在滚动或切换展开/折叠后更新

tableview 的行高没有变化,CollectionView 正在捕获所有未使用的空间,而不是在 tableViewCell 中调整自身大小

swift - 将行高设置为0时,tableview最后一部分被打乱