UITableView加載未知寬高圖片

在開發(fā)中遇到了UITableView列表UITableViewCell裝載圖片但不知Image的寬高問題。采用第三方框架SDWebImage實(shí)現(xiàn)對(duì)圖片異步下載和緩存。

1.計(jì)算UITableView的高度

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *imgURL  = self.electionPictureArray.count > indexPath.row ? self.electionPictureArray[indexPath.row] :nil;
   if (imgURL) {
       //根據(jù)當(dāng)前Row的ImageUrl作為Key獲取圖片緩存
       UIImage *img = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey: imgURL ];
       if (!img) {
            img = [UIImage resizedImageWithName:@"childshow_placeholder"];
       }
      CGFloat height = img.size.height *Main_Screen_Width/img.size.width;//Image寬度為屏幕寬度 ,計(jì)算寬高比求得對(duì)應(yīng)的高度
      NSLog(@"----------------return Height:%f",height);
      return height;
    }
    return 0;
}

2.在UITableViewCell中實(shí)現(xiàn)圖片的下載,回調(diào)下載完成刷新頁面代理

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
    ElectronicBookCell *cell = [ElectronicBookCell cellWithTableView:tableView];
    cell.imageUrl = self.electionPictureArray.count > indexPath.row ?   self.electionPictureArray[indexPath.row] :nil;
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    return cell;
}

在cell中的setImageUrl中進(jìn)行下載圖片

-(void) setImageUrl:(NSString *)imageUrl{
    if (imageUrl) {
        _imageUrl = imageUrl;
        UIImage *cachedImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:imageUrl];
        // 沒有緩存圖片
        if (!cachedImage) {
            __weak typeof(self) target = self;
            // 利用 SDWebImage 框架提供的功能下載圖片
            [[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:imageUrl] options:SDWebImageDownloaderUseNSURLCache progress:^(NSInteger receivedSize, NSInteger expectedSize) {
                
            } completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
                // 保存圖片
                [[SDImageCache sharedImageCache] storeImage:image forKey:imageUrl toDisk:YES]; // 保存到磁盤
                if (imageUrl == target.imageUrl) {
                     [target configPreviewImageViewWithImage:image];
                }
                if ([self.delegate respondsToSelector:@selector(reloadCellAtIndexPathWithUrl:)]) {
                    [self.delegate reloadCellAtIndexPathWithUrl:imageUrl];
                }
            }];
        }else
        {
            [self configPreviewImageViewWithImage:cachedImage];
        }

    }
}
/**
 * 加載圖片成功后設(shè)置image's frame
 */
- (void)configPreviewImageViewWithImage:(UIImage *)image
{
    _previewWidth = Main_Screen_Width;
    _previewHeight =  image.size.height *Main_Screen_Width/image.size.width;
    CGRect rect = _previewImageView.frame;
    rect.size.width = _previewWidth;// image.size.width;
    rect.size.height = _previewHeight;
    _previewImageView.frame = rect;
    _previewImageView.image = image;
    [self resetLayoutByPreviewImageView];
}

3.在Controller中實(shí)現(xiàn)代理方法

-(void)reloadCellAtIndexPathWithUrl:(NSString *)url{
    
    if (url) {
        for (int i = 0; i< self.electionPictureArray.count; i++) {
            //遍歷當(dāng)前數(shù)據(jù)源中并找到ImageUrl 
            NSString *imgURL  =   self.electionPictureArray.count >i ? self.electionPictureArray[i] :nil;
            if ([imgURL isEqualToString:url]) {
                //獲取當(dāng)前可見的Cell NSIndexPaths
                NSArray *paths  = self.tableView.indexPathsForVisibleRows;
                //判斷回調(diào)的NSIndexPath 是否在可見中如果存在則刷新頁面
                NSIndexPath *pathLoad = [NSIndexPath indexPathForItem:i inSection:0];
                for (NSIndexPath *path in paths) {
                    if (path && path == pathLoad ) {
                        [self.tableView reloadData];
                    }
                }
            }
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,259評(píng)論 4 61
  • 概述在iOS開發(fā)中UITableView可以說是使用最廣泛的控件,我們平時(shí)使用的軟件中到處都可以看到它的影子,類似...
    liudhkk閱讀 9,093評(píng)論 3 38
  • wanggang1966閱讀 171評(píng)論 0 1
  • 今天早上,我把小暖男的嗯嗯倒到廁所,然后順手沖掉了。在我按下按鈕的那一刻,小暖男說:“我來,我來。”可是已經(jīng)來不及...
    米勒Li閱讀 217評(píng)論 0 0
  • 男人的魅力離不開簡(jiǎn)約帥氣的服侍,離不開帥氣陽光的發(fā)型,離不開潔凈無瑕的臉龐,更離不開知識(shí)帶來的高端修為。如果一個(gè)人...
    玩機(jī)社閱讀 17,196評(píng)論 0 3