内容拥抱和内容压缩阻力,Autolayout约束的问题

时间:2015-03-28 01:54:00

标签: ios autolayout constraints

我已将问题修改为提供更多信息并清除。

我想拥有一个动态表格视图单元格,具有UITextView的灵活高度和可选的UIImageView。根据UITextView和可选UIImageView的内容大小,可以缩小或扩展单元格。

以下是我的预期(如下图所示):

  • 正常大小:TextView的高度是固定的(比如77)。 ImageView的宽度和高度也是固定的(比如130,130)
  • 当TextView的内容大小减少时,单元格缩小,ImageView向上移动。
  • 当ImageView中没有图像时,ImageView不显示,单元格缩小。

enter image description here

以下是观点结构:

  • mainView是contentView的子视图
  • topView,textView,bigImageView,bottomView是mainView的子视图

enter image description here

然而,我实际得到的内容如下。

  • 左图:如果内容大小很大,则无法看到ImageView。
  • 右图:如果内容大小为一行,可以看到ImageView,但其宽度和高度不固定130,130

enter image description here

警告问题如下:

enter image description here

如果我通过选择“添加缺失约束”来修复它,我得到的结果如下:

  • 右图显示TextView的高度不再灵活。

enter image description here

TextView的约束,内容拥抱优先级,内容压缩阻力和内在大小:

  • 我没有使用此TextView的内在大小

enter image description here

ImageView的约束,内容拥抱优先级,内容压缩阻力和内在大小:

  • 我为此ImageView使用了内在大小

enter image description here

我一直在玩TextView和ImageView的拥抱优先级和压缩阻力优先级,但没有运气。结果都不是我的预期。

请帮助指出设置中出现的问题以及如何实现目标。

1 个答案:

答案 0 :(得分:3)

这里棘手的部分似乎是,当有图像时,你希望它是130x130,但是当没有图像时,你希望它被隐藏。

我的建议是为高度和宽度添加一个约束,其中< = 130而不是= 130,并为纵横比添加约束,即1:1。

当没有图像时,这将允许图像视图缩小到0x0。

当有图像时,它会缩放到图像大小,但保持正方形。它永远不会超过130x130。不是你想要的但是接近。

你不应该担心我不认为拥抱和压缩。

要做到你想要的我认为需要代码。您需要为高度和宽度约束创建IBOutlets,但这次使它们= 130。在将图像设置为图像视图时,在代码中,将代码中的约束常量设置为130或0.我认为这是实现您要求的唯一方法。要执行此操作,请按CTRL从宽度和高度约束拖动到控制器的.h并创建IBOutlets。这就是我如何处理需要根据单元格的数据模型状态做出决策的约束。