内容拥抱和内容压缩阻力问题,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。 这就是我如何处理需要根据单元格的数据模型的状态决定的约束。