首页 文章

调整大小后,UITableViewCell中的UIImageView低分辨率

提问于
浏览
0

我真的对自动布局和UITableViewCell的东西感到沮丧 . 我有一个带有动态高视单元的UITableView . 单元格内部可以有图像 . 图像应该适合UIImageView的宽度 .

图像大于UIImageView的大小 . 因此,在下载图像后,我调整图像大小,然后将其放入UIImageView中 . 但是,相对于UIImageView的宽度调整图像大小会导致分辨率低,因为UIScreen的比例大于1.因此我尝试在操作后增加图像的预期大小(size =(scale * imageViewWidth,scale * imageViewHeight)) .

但是,这次,细胞的高度变大了2倍 . 我想要做的基本上是,同时保持UIImageView的高度相同,提高分辨率 .

class ProgressImageView : UIImageView{
    func setImage(imagePath:String?, placeholder:String, showProgress:Bool, showDetail:Bool){
            if imagePath == nil{
                self.image = UIImage(named: placeholder)
            }else{

                if showProgress{
                    self.setShowActivityIndicatorView(true)
                    self.setIndicatorStyle(.Gray)
                }
                let placeholderImage = UIImage(named: placeholder)
                SDWebImageManager.sharedManager().downloadImageWithURL(NSURL(string: imagePath!), options: SDWebImageOptions.RefreshCached, progress: nil, completed: { (image, error, _, _, _) in
                    //resize image to fit width
                    if error != nil{
                        self.image = placeholderImage
                    }else {
                        self.setImageFitWidth(image)
                    }
                })
            }
    }
}

extension UIImageView{
    func setImageFitWidth(image: UIImage){
        let w = self.bounds.size.width //* UIScreen.mainScreen().scale
        print ("ImageView size:\(self.bounds.size) scaled width:\(w)")
        self.image = image.convertToWidth(w)
    }
}

extension UIImage{
    func convertToWidth(let width: CGFloat) -> UIImage{
        print ("Old image size:\(self.size)")
        let ratio = self.size.width / width
        let height = self.size.height / ratio
        let size = CGSizeMake(width, height)
        print ("New image size:\(size)")
        UIGraphicsBeginImageContext(size)
        self.drawInRect(CGRectMake(0, 0, size.width, size.height))
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image
    }
}

正如你在setImageFitWidth方法中看到的那样,没有UIScreen.mainScreen() . scale它可以正常工作,除了分辨率和缩放,UIImageView的大小翻倍 . 顺便说一句,我尝试了内容模式的所有可能选项(方面适合,方面填充等),我正在使用自动布局 .

导致分辨率低:
enter image description here

导致高分辨率:
enter image description here

我希望我的屏幕就像在第一个ss中一样,但是在第二个ss中分辨出图像 .

1 回答

  • 2

    尝试使用UIGraphicsBeginImageContextWithOptions(size:size,opaque:YES,scale:0)来绘制图像 . 标度0表示该函数将从设备获得适当的比例因子 .

相关问题