使用AutoLayout缩放UIImageView以适应宽度

时间:2015-02-26 01:49:06

标签: ios uiimageview autolayout

我在UIScrollView上有一个UIImageView,我希望它适合设备宽度,然后自动设置它的高度,以保持图像比率。

我正在使用自动布局,因此我使用约束将UIImageView绑定到屏幕的顶部,左侧和右侧边缘。 我的问题是,UIImageView自动调整其框架大小以适应UIImage高度。之后我无法真正改变这个框架,因为它允许UIImageView和其他UI元素之间存在间隙,这些元素本应位于其下面。

我通过在将图像放入UIImageView之前手动调整图像大小来找到一种解决方法,但效率不高,并且在调整视图大小时会产生问题,例如当设备旋转时。

有没有人找到一种方法来强制UIImageView更改其框架并保留它而不是使用图像的大小?

皮尔

编辑:我添加了截图,以便您可以看到问题。

screenshot

这是预期的结果:

expected result

2 个答案:

答案 0 :(得分:7)

好的,我找到了解决问题的合适方法。

我像这样计算出我想要的正确身高:

  

correctHeight = screenWidth / width * height

之后,我在updateViewConstraints方法中以编程方式添加高度约束。

我使用此代码:

[imageView addConstraint:[NSLayoutConstraint constraintWithItem:imageView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant: correctImageViewHeight]];

之后要考虑两件事:

  • 每次调用此方法时都会删除约束(否则最终会出现冲突的约束)。为此,我使用[imageView removeConstraint: imageView.constraints.lastObject] ;
  • [super updateViewConstraints] ;放入方法中。如果你忘记了,它会崩溃。

我还没有完成,但我可以很容易地看到当设备旋转时如何更新我的correctHeight变量。

答案 1 :(得分:0)

使用以下代码

imageView.contentMode = UIViewContentModeScaleAspectFill;
imageView.autoresizingMask =   
    ( UIViewAutoresizingFlexibleBottomMargin
    | UIViewAutoresizingFlexibleHeight
    | UIViewAutoresizingFlexibleLeftMargin
    | UIViewAutoresizingFlexibleRightMargin
    | UIViewAutoresizingFlexibleTopMargin
    | UIViewAutoresizingFlexibleWidth );

你能提供代码吗?