调整

时间:2016-05-15 15:35:56

标签: ios swift uitableview uiimageview autolayout

我真的对自动布局和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 个答案:

答案 0 :(得分:2)

尝试使用UIGraphicsBeginImageContextWithOptions(size:size,opaque:YES,scale:0) 画出你的形象。 标度0表示该函数将从设备获得适当的比例因子。