如何制作自动布局的正方形图像视图

3

我有一个包含单个图像视图的单元格。它有如下约束:左(12)上(12)右(12)下(12)。

这样很好,但我想要保存这些偏移量(也许去掉底部偏移),并添加高度=宽度的约束,这样图像将始终是正方形,并且始终具有左上右的偏移量等于12。

在我添加了高度=宽度的约束后,图像没有显示出来。 图像是从网络下载的,因此不会立即可用。 如何修复它?


如果您想在IB中使用正方形视图,这是我去年三月份给出的答案(因此是Swift 3),以及相关的Git存储库。https://stackoverflow.com/questions/42860324/autolayout-contraints-for-a-view-from-xib/42861232#42861232 的技巧是(a)设置1:1的宽高比,以及(2)使用不同优先级设置两个边距高度/宽度偏移的约束条件。 - user7014451
单独评论:如果您的问题是如何在代码中创建一个正方形视图,我可以给您一个使用布局锚点的单独的Swift 4答案。这基本上是相同类型的策略。 - user7014451
3个回答

9

步骤1:选择View并添加4个约束条件:TopLeftRightAspect Ratio

enter image description here

步骤2:选择视图的aspect constraint(例如: X:Y

enter image description here

步骤3:Multiplier设置为1:1,然后完成设置!!!

enter image description here


不幸的是,它没有工作,它显示了一个“灰色”矩形,而不是单元格应该在的位置,并且它说 - 警告仅一次:检测到约束模棱两可地建议表视图单元格内容视图高度为零的情况。我们认为这是意外的折叠,并使用标准高度代替。 - Evgeniy Kleban
如果图像的高度超出了Superview怎么办? - Pawan
@Pawan 然后添加另一个约束条件,确保正方形的底部小于或等于父视图的底部。 - roy

1
您的约束看起来很好。Roy的答案也是正确的(尽管在横向模式下它不会很好地工作,因为ImageView将绘制到屏幕外部,因为它试图在保持上、左和右边距的同时匹配宽度和高度)。但是,您仍然会得到意外的结果,因为您设置了一个通过下载获取图像的ImageView的约束。因此,您的ImageView的内在内容大小由运行时图像的大小定义。
在这里,您可以强制Imageview不要比其边界更大。您只需从Interface Builder中选中“剪切到边界”选项即可实现此操作。

0
在我的情况下,我开始尝试使用视图优先级和常量,并解决了我的问题。 约束优先级的默认值为1000,您可以将某些约束值设置得更低,以获得所需的视图设计。
您还可以更改常量符号(==,<=,>=)的值,以获得所需的设计。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接