在scaleAspectFit之后调整UIImageView框架的大小

时间:2016-06-25 19:59:47

标签: ios xcode swift

我在IB中使用Aspect Fit的内容模式创建了一个UIImageView。然后我从网址将大图片加载到该视图。

@IBOutlet weak var pictureView: UIImageView!

NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: { (data, _, error) -> Void in
guard let data = data where error == nil,
      let image = UIImage(data: data)
      else {
           print(error?.localizedDescription)
           return
}

pictureView.image = image
pictureView.clipsToBounds = true
setNeedsLayout()
layoutIfNeeded()

}).resume()

图像加载在UIImageView中,Aspect Fit会正确调整图像大小以在帧中显示所有图像,但UIImageView的帧设置为原始大图像的大小。我有这个巨大的框架包裹这个较小的调整大小的图像。我需要UIImageView框来紧密包裹Aspect Fit UIImage,抛弃我所有的其他格式。

Huge frame

我是否需要以某种方式为UIImageView手动计算新的帧大小,或者我在某个地方错过了某个设置?

编辑:

我还尝试了以下操作来调整图片周围UIImageView框的大小:

pictureView.frame = AVMakeRectWithAspectRatioInsideRect(picture.size, pictureView.frame)

和...

pictureView.frame = CGRectMake(self.pictureView.frame.origin.x, self.pictureView.frame.origin.y, pictureImage.size.width, pictureImage.size.height)

我也尝试过使用抗压设置。

1 个答案:

答案 0 :(得分:1)

有一些涉及的事情。

依赖项:

1)图像尺寸。如果图像高度/宽度比率不大于或等于ImageView高度/宽度比,则会显示黑色空间,因为与ImageView匹配的比率较低。

2)我不确定你的imageView的约束,因为我可以看到它是一个@IBOutlet。

我对你的句子很困惑“但是UIImageView的框架被设置为原始大图像的大小。我有这个巨大的框架包裹这个较小的调整大小的图像。”

我相信您想要做的是将图像设置为imageView,但似乎您将UIImageView设置为图像大小,然后将图像设置为UIImageView,这使得调试真的很混乱。你能详细解释一下你想要发生什么吗?

修改

有一个带框架的ImageView - 这个框架永远不会有所不同。

contentMode将改变图像在imageView上的显示方式

UIViewContentModeScaleAspectFitUIViewContentModeScaleAspectFill模式缩放图像以适合或填充空间,同时保持图像的原始高宽比。

UIViewContentModeScaleToFill值会缩放图像,而不考虑原始宽高比,这会导致图像失真。

UIViewContentModeScaleToFill 如有必要,可以通过更改内容的宽高比来缩放内容以适合自身大小的选项。 *(大多数情况下不推荐)

UIViewContentModeScaleAspectFit 通过保持纵横比来缩放内容以适合视图大小的选项。视图边界的任何剩余区域都是透明的。 *(这可以保证整个图像适合屏幕。所以如果图像的比例小于屏幕,那么在某些边缘上会有黑色,无论是上/下还是左/右)

UIViewContentModeScaleAspectFill 缩放内容以填充视图大小的选项。可以剪裁内容的某些部分以填充视图的边界。 *(这个保证采取整个IMAGEVIEW)