固定宽度,可变高度图像视图ios布局

时间:2016-03-09 22:58:24

标签: ios swift autolayout imageview

我想要一个固定宽度但高度可变的imageview。如果我从网站获得的图像比故事板中的图像视图更高,我想刷新视图,

当我使用“缩放到填充”时,这是视图。

postimg.org/image/6l1ol2pvz

这是我使用“Aspect Fill”

的时候

postimg.org/image/9duw53q8f /

我希望图像与“Aspect Fill”相似,但我无法正确放置底部。

谢谢大家!

解决方案:

我给出了我的图像宽度和高度限制。然后我以编程方式更改了它。这是我想要的观点,我让它成功了!

http://i.stack.imgur.com/PCgHw.png

let imageData = NSData(contentsOfURL: imgUrl)
let myImage = UIImage(data: imageData!)
let aspectRatio = (myImage?.size.height)! / (myImage?.size.width)!

self.postCombineImageViewHeight.constant = UIScreen.mainScreen().bounds.size.width * aspectRatio
self.postCombineImageViewWidth.constant = UIScreen.mainScreen().bounds.size.width

谢谢大家的帮助!

5 个答案:

答案 0 :(得分:3)

您应该选择"剪辑子视图"在"属性检查器"在IB中的此图像视图(或以编程方式设置图像视图的clipToBounds属性)。

例如,这是在方形图像视图中显示的风景图像,其内容模型为"方面填充",但是具有"剪辑子视图"未经检查(即将clipToBounds设置为false):

enter image description here

(我已添加红色CAShapeLayer以显示frame的{​​{1}}位置。)

这是相同的图片视图,但使用"剪辑子视图"已检查(即UIImageView属性为clipToBounds):

enter image description here

或者,你可以选择"方面适合"而不是"方面填充",在这种情况下整个图像将是可见的而不是扭曲的,但你最终可能会空白照片边缘的空间:

enter image description here

答案 1 :(得分:2)

您可以在storyboard中制作高度约束,然后在viewcontroller中拖放约束IBOutlet,并在从网站获取imageview时更改其常量

答案 2 :(得分:0)

你在使用故事板吗?和汽车布局?

试试这个:放置一个"垂直距离"照片底部与底部视图顶部之间的约束。

然后单击添加的约束,并在属性检查器上将关系更改为"大于或等于"。

这样,imageView高度将适应图像内容;但是如果图像的高度变得太大,它会在到达底部视图时停止生长。

答案 3 :(得分:0)

我的解决方案 -

1)为图像提供高度和宽度约束。

2)导入AVFoundation套件。

3)通过以下代码为您的图像生成一个新的矩形(通过纵横比拟合) -

  let boundingRect =  CGRect(x: 0, y: 0, width: width, height: CGFloat(MAXFLOAT))//width is your fixed width for your image eg. - if your image covers width of your superview. It can be - self.view.frame.width

          let rect  = AVMakeRectWithAspectRatioInsideRect(photo.image.size, boundingRect)

所以现在你得到了你的直觉 -

现在你可以通过这样的方式改变你的身高限制 -

imageHeightConstraint.constant = rect.size.height

答案 4 :(得分:0)

您可以使用NSLayoutConstraint

以编程方式执行此操作
self.addConstraint(NSLayoutConstraint(
        item: myButton,
        attribute: .Width,
        relatedBy: .Equal,
        toItem: nil,
        attribute: .NotAnAttribute,
        multiplier: 1.0,
        constant: 200))

对于高度,您可以添加变量高度