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

我已经修改了这个问题,提供了更多的信息和清晰的信息。

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

这是我所期望的(下图):

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

在这里输入图像说明

以下是观点的结构:

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

在这里输入图像说明

但是,我实际得到如下。

  • 左图:如果内容尺寸较大,则无法看到ImageView。
  • 右图:如果内容大小是一行,ImageView可以看到,但是它的宽度和高度不固定130,130

在这里输入图像说明

警告问题如下:

在这里输入图像说明

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

  • 正确的图片显示TextView的高度不再灵活。

在这里输入图像说明

TextView的限制,内容拥抱优先权,内容压缩阻力和内在尺寸:

  • 这个TextView没有使用Intrinsic尺寸

在这里输入图像说明

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

  • 我用这个ImageView的内在大小

在这里输入图像说明

我一直在玩TextView和ImageView的拥抱优先和压缩优先级,但没有运气。 没有结果是我所期望的。

请帮助指出设置中的错误以及如何实现我的目标。

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

我的build议是增加一个高度和宽度的约束是<= 130,而不是= 130,并添加约1:1的纵横比约束。

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

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

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

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