是否可以在UIImageView中使用方面填充内容模式与顶级内容模式相结合?

V-D*_*Dev 8 image ios

对于a UIImageView,我使用的是方面填充内容模式.没关系,但是对于某些图像,它会从顶部剪切,因为我使用过clipsToBounds = true.所以这就是我想要的:我想让两个过滤器同时处于活动状态,例如:

这是我设置为纵横填充的图像视图:

具有宽高填充内容模式的图像视图

...和我设置的图像视图contentMode = .top:

顶级内容模式的图像视图

所以我想合并这两种内容模式.可能吗?提前致谢.

Tam*_*gel 8

您应该调整图像的大小,使其具有图像视图的宽度,但保持其纵横比.之后,将图像视图的内容模式设置为.top并为其启用剪切边界.

resizeTopAlignedToFill函数是此答案的修改版本.

func setImageView() {
    imageView.contentMode = .top
    imageView.clipsToBounds = true
    imageView.image = UIImage(named: "portrait").resizeTopAlignedToFill(newWidth: imageView.frame.width)
}

extension UIImage {
    func resizeTopAlignedToFill(newWidth: CGFloat) -> UIImage? {
        let newHeight = size.height

        let newSize = CGSize(width: newWidth, height: newHeight)

        UIGraphicsBeginImageContextWithOptions(newSize, false, UIScreen.main.scale)
        draw(in: CGRect(origin: .zero, size: newSize))
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return newImage
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @JamesP 你是对的,感谢您的通知,“newHeight”的计算丢失了。我更新了我的代码。 (2认同)

小智 6

尝试这个:

imageView.contentMode = UIViewContentModeTop;
imageView.image = [UIImage imageWithCGImage:image.CGImage scale:image.size.width / imageView.frame.size.width orientation:UIImageOrientationUp];
Run Code Online (Sandbox Code Playgroud)