我真的对自动布局和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中分辨出图像。
答案 0 :(得分:2)
尝试使用UIGraphicsBeginImageContextWithOptions(size:size,opaque:YES,scale:0) 画出你的形象。 标度0表示该函数将从设备获得适当的比例因子。