Content Hugging 和 Content Compression Resistance 的问题,Autolayout 约束
An issue with Content Hugging and Content Compression Resistance, Autolayout Constraints
我已将问题修改为提供更多信息且更清楚。
我想要一个动态的 table 视图单元格,具有灵活高度的 UITextView 和可选的 UIImageView。根据 UITextView 和可选的 UIImageView 的内容大小,可以缩小或扩展单元格。
这是我期望的(下图):
- 正常大小:TextView 的高度是固定的(比如 77)。 ImageView的宽高也是固定的(比如130、130)
- 当TextView的内容变小时,cell缩小,ImageView上移
- 当ImageView中没有图片时,ImageView不显示,cell缩小。
下面是视图结构:
- mainView 是 contentView 的子视图
- topView、textView、bigImageView、bottomView 是 mainView 的子视图
然而,我实际得到的是如下
- 左图:如果content尺寸较大,则ImageView是看不到的。
- 右图:如果content size是一行,可以看到ImageView,但是它的宽高不固定130, 130
警告问题如下:
如果我通过选择"Add Missing Constraints"修复它,我得到的结果如下:
- 右图显示TextView的高度不再灵活
TextView 的约束、Content Hugging Priority、Content Compression Resistance 和 Intrinsic Size:
- 我没有为此 TextView 使用固有大小
ImageView 的约束、内容压缩优先级、内容压缩阻力和内部大小:
- 我为此 ImageView 使用了固有尺寸
我一直在研究 TextView 和 ImageView 的 Hugging Priority 和 Compression Resistance Priority,但没有成功。 None 的结果符合我的预期。
请帮忙指出设置中的错误以及如何实现我的目标。
这里棘手的部分似乎是当有图像时您希望它是 130x130 但当没有图像时您希望它被隐藏。
我的建议是为高度和宽度添加一个约束,即 <= 130 而不是 = 130,并为宽高比添加一个约束,即 1:1.
这将使图像视图在没有图像时缩小到 0x0。
当有图片时,它会缩放到图片大小,但保持正方形。它永远不会大于 130x130。不完全是你想要的,但很接近。
我认为您不必担心拥抱和挤压。
我认为要完全按照您的意愿行事需要代码。您需要为高度和宽度约束创建 IBOutlets,但这次让它们 =130。在您的代码中,当您将图像设置到图像视图中时,将代码中的约束常量设置为 130 或 0。我认为这是实现您所要求的唯一方法。为此,您可以按住 CTRL 键将宽度和高度约束拖到控制器的 .h 文件中,然后创建 IBOutlets。这就是我如何处理需要根据单元格数据模型的状态做出决定的约束。
我已将问题修改为提供更多信息且更清楚。
我想要一个动态的 table 视图单元格,具有灵活高度的 UITextView 和可选的 UIImageView。根据 UITextView 和可选的 UIImageView 的内容大小,可以缩小或扩展单元格。
这是我期望的(下图):
- 正常大小:TextView 的高度是固定的(比如 77)。 ImageView的宽高也是固定的(比如130、130)
- 当TextView的内容变小时,cell缩小,ImageView上移
- 当ImageView中没有图片时,ImageView不显示,cell缩小。
下面是视图结构:
- mainView 是 contentView 的子视图
- topView、textView、bigImageView、bottomView 是 mainView 的子视图
然而,我实际得到的是如下
- 左图:如果content尺寸较大,则ImageView是看不到的。
- 右图:如果content size是一行,可以看到ImageView,但是它的宽高不固定130, 130
警告问题如下:
如果我通过选择"Add Missing Constraints"修复它,我得到的结果如下:
- 右图显示TextView的高度不再灵活
TextView 的约束、Content Hugging Priority、Content Compression Resistance 和 Intrinsic Size:
- 我没有为此 TextView 使用固有大小
ImageView 的约束、内容压缩优先级、内容压缩阻力和内部大小:
- 我为此 ImageView 使用了固有尺寸
我一直在研究 TextView 和 ImageView 的 Hugging Priority 和 Compression Resistance Priority,但没有成功。 None 的结果符合我的预期。
请帮忙指出设置中的错误以及如何实现我的目标。
这里棘手的部分似乎是当有图像时您希望它是 130x130 但当没有图像时您希望它被隐藏。
我的建议是为高度和宽度添加一个约束,即 <= 130 而不是 = 130,并为宽高比添加一个约束,即 1:1.
这将使图像视图在没有图像时缩小到 0x0。
当有图片时,它会缩放到图片大小,但保持正方形。它永远不会大于 130x130。不完全是你想要的,但很接近。
我认为您不必担心拥抱和挤压。
我认为要完全按照您的意愿行事需要代码。您需要为高度和宽度约束创建 IBOutlets,但这次让它们 =130。在您的代码中,当您将图像设置到图像视图中时,将代码中的约束常量设置为 130 或 0。我认为这是实现您所要求的唯一方法。为此,您可以按住 CTRL 键将宽度和高度约束拖到控制器的 .h 文件中,然后创建 IBOutlets。这就是我如何处理需要根据单元格数据模型的状态做出决定的约束。