我真的对自动布局和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的大小翻倍 . 顺便说一句,我尝试了内容模式的所有可能选项(方面适合,方面填充等),我正在使用自动布局 .
导致分辨率低:
导致高分辨率:
我希望我的屏幕就像在第一个ss中一样,但是在第二个ss中分辨出图像 .
1 回答
尝试使用UIGraphicsBeginImageContextWithOptions(size:size,opaque:YES,scale:0)来绘制图像 . 标度0表示该函数将从设备获得适当的比例因子 .