Swift 根据子TableViewController的高度更改父UITableView单元格的高度

Swift 根据子TableViewController的高度更改父UITableView单元格的高度,swift,uitableview,uiviewcontroller,Swift,Uitableview,Uiviewcontroller,这些图像是从网络下载的,每个图像都有自己的高度。因此,当加载图像时,如何在WidgetVC中更改行的高度 WidgetsVC可以包含多个ListVC 提前感谢。由于您将UIViewController嵌入到UITableViewCell中,因此无法依靠自动布局根据加载的图像自动更改高度 因此,我建议您将图像加载逻辑移动到WidgetsVC,并在每次加载图像时执行以下操作 计算加载图像的高度/宽度纵横比(如果图像加载库具有完成处理程序,则可以将其用于计算目的) 计算图像的拟合高度(这仍然在Widg

这些图像是从网络下载的,每个图像都有自己的高度。因此,当加载图像时,如何在WidgetVC中更改行的高度

WidgetsVC可以包含多个ListVC


提前感谢。

由于您将
UIViewController
嵌入到
UITableViewCell
中,因此无法依靠自动布局根据加载的图像自动更改高度

因此,我建议您将图像加载逻辑移动到
WidgetsVC
,并在每次加载图像时执行以下操作

  • 计算加载图像的高度/宽度纵横比(如果图像加载库具有完成处理程序,则可以将其用于计算目的)
  • 计算图像的拟合高度(这仍然在
    WidgetVC
    中的图像加载程序的完成处理程序中)
  • 让imageHeight=aspectRatio*self.tableView.frame.width
    
  • 将图像及其计算的拟合高度存储在数据结构中
  • 在步骤1中介绍的完成处理程序末尾调用
    tableView.reloadData()
  • tableView(tableView:UITableView,heightForRowAt indexPath:indexPath)
    方法中,传入存储在数据结构中的高度
  • tableView(tableView:UITableView,cellForRowAt indexath:indexPath)
    方法中,传入存储在数据结构中的图像
  • 下面显示了可在上述步骤3中使用的数据结构示例

    struct WidgetListImageModel{
    变量高度:CGFloat
    var-image:UIImage
    }
    var widgetImageModels:[Int:WidgetListImageModel]=[:]
    
    请注意,
    widgetmagemodels
    是一个
    字典
    ,原因如下

  • 您可能已经有了一个在
    WidgetVC
    cellForRowAt
    方法中传递的数据模型,因此您可以独立存储所需的信息,而不是对其进行修改
  • 通过使用
    indexPath.row
    作为
    heightForRowAt
    cellForRowAt
    方法的索引,您可以轻松地查询
    widgetmagemodels
    以获取所需的信息
  • 您不必维护要为内部
    WidgetListImageModel
    加载数据的单元格的索引
  • 以上步骤假设了当前实现的许多方面,因为您没有提供任何代码。如果您有问题或答案不适用于您的代码,请告诉我。我会尽力帮你的

    干杯

    WidgetsVC(has a table view and uses tableview automatic dimension)
    
        ->ListVC(uses tableview automatic dimension and embedded as a row inside WidgetVC)
    
            ->TableViewCell-Image(embedded inside ListVC)