ScrollView内的iOS Stackview具有保留图像纵横比

时间:2018-10-15 13:32:44

标签: ios autolayout scrollview stackview

我对可滚动内容有疑问。基本上,我想在屏幕上放置一个ImageView宽度等于Label宽度的ImageView和一个screenheight取决于intrinsic content aspect ratio(而宽度始终等于屏幕宽度)。

label是20间距的波纹管ImageView。这意味着整个内容高度可以小于或等于甚至大于根view。我尝试将LabelImageView放在StackView内(ImageView的设置为Aspectfit),然后将StackView放在{{ 1}}。如下设置ScrollView

enter image description here

问题是ImageView与顶部constraints之间以及SuperviewImageView之间的距离太大(理想情况下应为20)。有什么方法可以达到预期的结果?

PS:我试图设置stackView分布,但没有帮助

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

tl; dr 删除纵横比约束并为UIImageView添加高度约束。

重要的是要了解UIImageView基本上是容纳图像的容器,并且其尺寸不一定反映图像的尺寸(除非您手动使它们相等)。当您将Aspect Fit选择为UIImageView的内容模式时,容器的大小不会更改为与图像的大小相对应;此设置仅更改了将图像放置在容器内的方式。

从您的屏幕截图中可以看到,UIImageView的高度大于宽度;此外,长宽比由您添加的约束条件固定。当您在该容器中放置横向图像时,后者在图像的顶部和底部都留有白色条(就像在旧显示器上观看宽屏视频时看到的黑条一样)。将内容模式更改为纵横比填充或缩放以填充以查看UIImageView的实际大小。

要解决此问题,请删除纵横比约束并为UIImageViewUIStackView设置一个固定高度。如果我是你,我可能会将UIStackView的高度设置为等于Safe Area,以便无论堆栈视图有多高,它都不会超出屏幕边界。