我创建了一个UIImageView
并为其分配了一个UIImage
。我将UIImageView内容模式设置为Aspect Fit
。如何删除图像顶部和底部的填充,或者如何调整UIImageView
的大小以环绕图像?我什么都试过了。
如果你要说获取图像的新大小,它不会起作用。在UIImageView
中获取图像大小只给出原始图像的宽度和高度。
请不要链接其他帖子。我已经读过了。它们不起作用。
发布于 2015-09-17 09:58:17
你可以手动计算适合你的图像的UIImageView的框架尺寸,或者使用AVMakeRectWithAspectRatioInsideRect(来自AVFoundation的方法)。
发布于 2016-12-21 01:26:40
因此,假设您将一个UIImageView设置为相对于视图的宽度相等。重绘图像的一种方法是使用Core Graphics。您所要做的就是计算您需要重新绘制图像以适合的比例因子。你可以在这里找到一些很棒的示例:
这是一个很好的教程,有基准测试可以更好地理解事物:
http://nshipster.com/image-resizing/
我使用的代码示例(基本上是github方法中的一个,根据我的需要进行了修改):
let image = UIImage(data: data!)
let oldWidth = image!.size.width
let scaleFactor = UIWindow().screen.bounds.width / oldWidth
let cgImage = image!.CGImage
let width = Double(CGImageGetWidth(cgImage)) * Double(scaleFactor)
let height = Double(CGImageGetHeight(cgImage)) * Double(scaleFactor)
let bitsPerComponent = CGImageGetBitsPerComponent(cgImage)
let bytesPerRow = CGImageGetBytesPerRow(cgImage)
let colorSpace = CGImageGetColorSpace(cgImage)
let bitmapInfo = CGImageGetBitmapInfo(cgImage)
let context = CGBitmapContextCreate(nil, Int(width), Int(height), bitsPerComponent, bytesPerRow, colorSpace, bitmapInfo.rawValue)
CGContextSetInterpolationQuality(context, .High)
CGContextDrawImage(context, CGRect(origin: CGPointZero, size: CGSize(width: CGFloat(width), height: CGFloat(height))), cgImage)
let scaledImage = CGBitmapContextCreateImage(context).flatMap { return UIImage(CGImage: $0) }
imageView.image = scaledImage
发布于 2019-08-15 02:24:42
当你使用NSLayoutConstraint
时,这太简单了
let imageView = UIImageView()
imageView.contentMode = .scaleAspectFit
view.addSubview(imageView)
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
imageView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
imageView.widthAnchor.constraint(equalToConstant: 250).isActive = true
let heightLayout = imageView.heightAnchor.constraint(equalToConstant: 250)
heightLayout.isActive = true
imageView.image = UIImage(named: "SomeImage")
if let size = imageView.image?.size {
heightLayout.constant = size.height / size.width * 250 // 250 is imageView width
view.layoutIfNeeded()
}
https://stackoverflow.com/questions/32512991
复制相似问题