我在UITableViewCell(Swift 4)中使用ImageScrollView可可豆荚v1.5。
我正在使用SDWebImage从Firestore下载图像(但也尝试了Kingfisher,但问题没有改变)。我的图像为700x700,并显示在ImageScrollView中,具体取决于设备,该图像约为400x100。我已经将SDWebImage imageContentMode设置为.widthFill。我旋转图像以使其以所需的形式用于tableview。我在其他地方按常规使用它。
第一次显示我的单元格时,图像正确显示。如果返回上一页,然后再次在表中显示相同的结果,可见单元格的图像将不再适合宽度,现在太宽了。如果我向下滚动以隐藏这些单元格,则所有新单元格都将正确显示,而当我向上滚动时,错误的单元格现在将正确显示。发生在模拟器和实际电话中。

这是我的UITableViewCell类的重要部分:

class MyTableCell: UITableViewCell {
var ski : Ski!
var skiImageView: UIImageView = UIImageView()
@IBOutlet weak var skiImageScrollView: ImageScrollView!


 func configureCell(ski: Ski) {
    self.ski = ski
    let imageUrl = ski.imageUrl!
    let url = URL(string: imageUrl)
     skiImageView.sd_setImage(with: url, placeholderImage: placeholderImage, options: [.retryFailed, .continueInBackground]
        , completed: {
            (image, error, cacheType, url) in
            if (error != nil) {
                print("ConfigureCell Error : \(error!)")
                return;
            }
            let rotatedImage = self.imageRotatedByDegrees(oldImage: image!, deg: 90.0)
            self.skiImageScrollView.display(image: rotatedImage)                var image = self.skiImageView.image!
            self.skiImageScrollView.imageContentMode = .widthFill

    })


}

func imageRotatedByDegrees(oldImage: UIImage, deg degrees: CGFloat) -> UIImage {
    //Calculate the size of the rotated view's containing box for our drawing space
    let rotatedViewBox: UIView = UIView(frame: CGRect(x: 0, y: 0, width: oldImage.size.width, height: oldImage.size.height))
    let t: CGAffineTransform = CGAffineTransform(rotationAngle: degrees * CGFloat.pi / 180)
    rotatedViewBox.transform = t
    let rotatedSize: CGSize = rotatedViewBox.frame.size
    //Create the bitmap context
    UIGraphicsBeginImageContext(rotatedSize)
    let bitmap: CGContext = UIGraphicsGetCurrentContext()!
    //Move the origin to the middle of the image so we will rotate and scale around the center.
    bitmap.translateBy(x: rotatedSize.width / 2, y: rotatedSize.height / 2)
    //Rotate the image context
    bitmap.rotate(by: (degrees * CGFloat.pi / 180))
    //Now, draw the rotated/scaled image into the context
    bitmap.scaleBy(x: 1.0, y: -1.0)
    bitmap.draw(oldImage.cgImage!, in: CGRect(x: -oldImage.size.width / 2, y: -oldImage.size.height / 2, width: oldImage.size.width, height: oldImage.size.height))
    let newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    return newImage
}


另一个奇怪的事情是,如果我拍打手机的后部或将其放在桌子上,图像会跳下来,因此在ImageScrollView中只能看到图像顶部的一部分,但是不会激活用于缩放的ImageScrollView回调,因此不知道那里发生了什么。

最佳答案

您可以尝试以下方法:

imageScrollView.imageContentMode = .aspectFit

之前

self.skiImageScrollView.display(image: rotatedImage)

关于swift - Swift 4 ImageScrollView调整UITableView中可见单元格的大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50592804/

10-13 05:05