我真的对自动布局和UITableViewCell
东西感到沮丧。我有一个UITableView
具有动态高度的单元格。单元格内部可以有图像。图片应适合UIImageView的宽度。
图像大于UIImageView的大小。因此,下载图像后,我调整了图像的大小,然后将其放入UIImageView
。但是,相对于UIImageView的宽度调整图像大小会导致分辨率降低,因为UIScreen的比例尺大于1。因此,我尝试在操作后增加图像的预期尺寸(尺寸=(比例尺* imageViewWidth,比例尺* 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中。
尝试使用UIGraphicsBeginImageContextWithOptions(size: size, opaque: YES, scale: 0)
绘制图像。比例0表示该功能将从设备获得适当的比例因子。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句