使用笔尖自定义单元格和自动布局滚动跳转(ios 8 swift - UITableview)

时间:2015-08-06 06:22:39

标签: iphone swift uitableview ios8 autolayout

我已使用此引用实现了自动布局的自定义单元格:https://github.com/smileyborg/TableViewCellWithAutoLayoutiOS8

在我的手机中,我有一个带有动态内容的imageView和5个标签。

我想要实现的就是来自Facebook的Feed,其中每个单元格的图像大小都不同。我有图像大小的元数据。

我尝试使用estimatedHeightForRow并给出一些平均高度。

布局中一切正常,但滚动时会跳转。

如何改善我的tableview滚动性能?

2 个答案:

答案 0 :(得分:1)

您已在部分评论中发布此代码:

    let block: SDWebImageCompletionBlock! = {
        (image: UIImage!, error: NSError!, cacheType: SDImageCacheType, imageURL: NSURL!) -> Void in
        self.ImageFeedView.sd_setImageWithURL(self.cueData.attachments[0].URL);
    }

    self.ImageFeedView.sd_setImageWithURL(self.cueData.attachments[0].URL, completed:block)

您正在设置图像两次。首先:

self.ImageFeedView.sd_setImageWithURL(self.cueData.attachments[0].URL, completed: block)

然后再次,完成块中的相同图像。这是不必要的,可能导致口吃。只需删除块并执行此操作:

self.ImageFeedView.sd_setImageWithURL(self.cueData.attachments[0].URL)

口吃现在应该更好。 (甚至解决,请尝试)

答案 1 :(得分:1)

上传大图时,表格有时会抽搐。也许尝试解码收到的照片:

UIImage *anImage = ...  // Assume this exists.
CGImageRef originalImage = (CGImageRef)anImage;
assert(originalImage != NULL);

CFDataRef imageData = CGDataProviderCopyData(CGImageGetDataProvider(originalImage));
CGDataProviderRef imageDataProvider = CGDataProviderCreateWithCFData(imageData);
if (imageData != NULL) {
  CFRelease(imageData);
}
CGImageRef image = CGImageCreate(CGImageGetWidth(originalImage),
                                 CGImageGetHeight(originalImage),
                                 CGImageGetBitsPerComponent(originalImage),
                                 CGImageGetBitsPerPixel(originalImage),
                                 CGImageGetBytesPerRow(originalImage),
                                 CGImageGetColorSpace(originalImage),
                                 CGImageGetBitmapInfo(originalImage),
                                 imageDataProvider,
                                 CGImageGetDecode(originalImage),
                                 CGImageGetShouldInterpolate(originalImage),
                                 CGImageGetRenderingIntent(originalImage));
if (imageDataProvider != NULL) {
  CGDataProviderRelease(imageDataProvider);
}

// Do something with the image.

CGImageRelease(image);

从CGImageCreate()接收的图像已经被解码,这正是我们所需要的。剩下的就是将这段代码包装在NSOperation中以在后台执行它,最后将结果发送到主线程。使用+ [UIImage imageWithCGImage:]我们从生成的CGImage中获取UIImage,并在滚动期间将其分配给所需的UIImageView。动画完美无缺。

相关问题