使用自动布局将表格视图单元格高度调整为图像高度

时间:2014-08-07 23:06:17

标签: ios objective-c uitableview uiimageview autolayout

我为包含xibLabel的自定义单元格创建了Image View个文件。 Image View宽度是固定的,但高度可以调整为下载图像的大小。

此外,应调整单元格高度以保持图像视图的边距。

当我阅读几篇关于汽车布局的文章时,我不太确定我知道自己在做什么,所以这里是:(如果有任何错误,请指出正确的方法)

  1. 为了保持image viewcell之间的差距,我应该创建一个约束。

  2. 通过选择image viewcell,然后转到编辑器 - >来完成上一个操作。 Pin - >底层空间到超级视图,因为我想保持图像视图对单元格的底部边距(并且单元格是容器)

  3. 到目前为止,据说,如果我调整图像视图的高度,单元格会自动调整其自身的高度,以便在调整大小之前保持其余量。

  4. 为了使Image View身高调整到Image我需要约束......(?)

  5. 已经阅读过这篇文章,他们确实很好地解释了它是如何使用的,而不是具体的:

    另请阅读此问题,但它根本没有说明任何有关自动布局的内容    - Change UIImageView size to match image with AutoLayout

    使用iOS 7

    编辑

2 个答案:

答案 0 :(得分:1)

以下是您要尝试做的主要问题:

1)你的tableView需要知道细胞的确切高度。如果约束可能来自UIImage而不是来自UIImageView,则单元格的高度会发生变化。幸运的是,UIView不会通过自动布局改变自己的身高。

2)要获得UITableViewCell的高度,您首先需要该图像的高度。长号。

所以这里有几个解决方案:

1)在你的班级中,将indexPaths的字典保存到cellHeights。确定tableView:heightForRowAtIndexPath:时检查一下。如果为空,则返回静态高度。

配置单元格后,他们可以在后台请求图像。设置图像时,获取其大小(仅使用UIImage的size属性)并使用该单元格的indexPath作为键设置tableViewController的字典,并在imageView上方/下方填充高度,加上图像的高度。告诉tableView重新加载该单元格,或者执行' ol [self.tableView beginUpdates]; [self.tableView endUpdates];特技。

2)请求ViewController中的所有图像返回0行作为数据源。全部取出后,在为dataSource准备好数据后重新加载表视图(特别是单元格高度)。

掌握自动布局+ UITableView需要一些时间。通常,最困难的部分是在没有实际细胞的情况下确定细胞的高度。根据可以调整细胞高度的因素,可以更容易地保留一个“模板”模板。每次需要确定高度时,viewController中的单元格都会反复重新配置内容,或者使用有关单元格布局的知识,而这些知识只会构建它。听起来后者在这种情况下最容易,因此我建议如何确定解决方案1的高度。

答案 1 :(得分:0)

iOS 8之前的痛苦。您的表视图委托必须实现方法-tableView:heightForRowAtIndexPath:以确定每个单元格的高度。值得庆幸的是,这在iOS 8中发生了变化,单元格可以确定自己的大小。