我在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,抛弃我所有的其他格式。
我是否需要以某种方式为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)
我也尝试过使用抗压设置。
答案 0 :(得分:1)
有一些涉及的事情。
依赖项:
1)图像尺寸。如果图像高度/宽度比率不大于或等于ImageView高度/宽度比,则会显示黑色空间,因为与ImageView匹配的比率较低。
2)我不确定你的imageView的约束,因为我可以看到它是一个@IBOutlet。
我对你的句子很困惑“但是UIImageView的框架被设置为原始大图像的大小。我有这个巨大的框架包裹这个较小的调整大小的图像。”
我相信您想要做的是将图像设置为imageView,但似乎您将UIImageView设置为图像大小,然后将图像设置为UIImageView,这使得调试真的很混乱。你能详细解释一下你想要发生什么吗?
修改强>
有一个带框架的ImageView - 这个框架永远不会有所不同。
contentMode将改变图像在imageView上的显示方式
UIViewContentModeScaleAspectFit
和UIViewContentModeScaleAspectFill
模式缩放图像以适合或填充空间,同时保持图像的原始高宽比。
UIViewContentModeScaleToFill
值会缩放图像,而不考虑原始宽高比,这会导致图像失真。
UIViewContentModeScaleToFill 如有必要,可以通过更改内容的宽高比来缩放内容以适合自身大小的选项。 *(大多数情况下不推荐)
UIViewContentModeScaleAspectFit 通过保持纵横比来缩放内容以适合视图大小的选项。视图边界的任何剩余区域都是透明的。 *(这可以保证整个图像适合屏幕。所以如果图像的比例小于屏幕,那么在某些边缘上会有黑色,无论是上/下还是左/右)
UIViewContentModeScaleAspectFill 缩放内容以填充视图大小的选项。可以剪裁内容的某些部分以填充视图的边界。 *(这个保证采取整个IMAGEVIEW)