完全缩放图像而不会丢失其内容

时间:2017-12-15 11:14:51

标签: ios swift swift3 uiimageview swift4

我在swift中处理一个项目,我使用xib文件来加载我的标题图像。截至目前,在我的图像视图中只能部分显示。我怎么能解决这个问题。

我想要的是什么 enter image description here

但我得到的是这个。

enter image description here

一旦我将内容情绪设置为方面适合我得到的就是这个。 enter image description here

这是我的故事板 enter image description here enter image description here

你可以看到"月亮"屏幕右侧的所有方式都不在图片中。我怎样才能正确地扩展它?

6 个答案:

答案 0 :(得分:0)

尝试使用下面的行重新调整图像

[[UIImage imageNamed:@"YOURIMAGE"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]

UIEdgeInsetsMake左上角右下角必须正确。

答案 1 :(得分:0)

你需要使imageView和图像的比例相等,即如果imageView的大小为26:46(高度:宽度),图像应遵循相同的比例标准13:23或52:92。您需要根据宽度/高度更改UIImageView以匹配图像的比例。无法拉伸图像。

答案 2 :(得分:0)

请在预览应用中查看图片,将宽高比设置为imageView。 打开图像集图像宽度与xib中UIImageView的宽度相同,然后相应的高度将在预览编辑器中调整。

现在转到你的xib文件并将imageview高度设置为与预览中显示的高度相同,然后设置imageView宽高比。

确保您已在xib中为imageView提供了足够的约束。

这样,图像将根据不同的设备尺寸进行调整。 确保图像宽度不小于从xib计算的最大imageView宽度,由于纵横比属性,imageview高度将相应调整。

答案 3 :(得分:0)

这里要明白的一点是,它不会使用1张图像为所有屏幕工作。

为什么:Designer为您提供了58高度和375宽度(iphone 8的宽度)的图像。

所以有一个问题如何在iPhone SE和iPhone 8plus上显示这个图像?而你只有1张图片。答案是你不能用1张图像使像素完美。

解决方案:

  1. 询问设计师他想要的样子也就像使用1张图像一样。
  2. 让设计师为您制作3张不同的图片。
  3. 分开图片和文字。要求提供1张图片,并将其设为scaleFill内容模式,并为自己设置文字标签。
  4. 希望它有所帮助。

答案 4 :(得分:0)

您必须使用scaleToFill才能提供帮助

AspectFill缩放内容以完全填充视图,保持宽高比和ScaleToFill拉伸视图以填充可用空间而不保持宽高比

所以,这可以拉伸你的图像,但它会起作用

答案 5 :(得分:0)

如果您只是想在不保持宽高比的情况下拟合给定图像,那么只需使用

即可
imageView.contentMode = .scaleToFill

但是如果要保持纵横比,则需要调整图像大小以适合imageView。您可以使用以下功能并传递imageView大小并应用返回的图像。详细了解here

extension UIImageView {

  func imageScaledToFit(_ size: CGSize) -> UIImage {
    let imageAspectRatio = self.size.width / self.size.height
    let canvasAspectRatio = size.width / size.height
    var resizeFactor: CGFloat

    if imageAspectRatio > canvasAspectRatio {        
       resizeFactor = size.width / self.size.width
    } else {
       resizeFactor = size.height / self.size.height
    }

    let scaledSize = CGSize(width: self.size.width * resizeFactor, height: self.size.height * resizeFactor)
    let origin = CGPoint(x: (size.width - scaledSize.width) / 2.0, y: (size.height - scaledSize.height) / 2.0)

    UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
    draw(in: CGRect(origin: origin, size: scaledSize))

    let scaledImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()

    return scaledImage 
  }
}

现在您可以像

一样使用它
imageView.contentMode = .scaleAspectFit
imageView.image = image.imageScaledToFit(imageView.bounds.size)