2013-07-17 69 views
0

我有從xib文件製作的自定義UITableViewCell。 而我UIImageView裏面的單元格,我設置固定的寬度和高度和40x40並設置爲隱藏在tableViewCell中動態改變UIImageView的寬度和高度

然後在cellForRowAtIndexPath數據源委託。我檢查該單元格的數據源是否包含圖像的URL。如果有,我設置ImageView出現。並且使用SDWebImage下載圖像,並在下載完成時在完成塊中調整imageView.frame的大小。

實際上,初看起來它工作正常。 ImageView是相同的大小和下載的圖像。但是,如果我向下滾動然後再次到達上方的單元格。它只是重新出現在40x40的尺寸上。誰能幫忙?

這是代碼,以防萬一,如果你好奇。我想代碼沒什麼問題,問題是我如何設置.xib文件中的UIImageView,但我不知道如何解決它。

// -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

if([item postImageURLString]){ 

     void (^completionBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType) = ^(UIImage *image, NSError *error, SDImageCacheType cacheType) { 

      CGRect imageFrame = CGRectMake(cell.frame.size.width/3,cell.frame.size.height -5 -image.size.height, image.size.width, image.size.height); 

      [cell.postImageView setFrame:imageFrame]; 


     }; 

      [cell.postImageView setHidden:NO]; 


     [cell.postImageView setImageWithURL:URL completed:completionBlock ]; 

    } 
+0

請顯示整個方法。是否有一個原因是你調整圖像大小(你如何保證它不會比單元格大)? – Wain

+0

我調整大小的原因是因爲這些圖像是由用戶上傳的,大小可以變化。我會限制寬度以適應ios屏幕。我將在稍後解決當前問題時實現HeightForRowAtIndexPath以重新調整單元格的高度。 –

回答

0

我懷疑它做的實現代碼如下重新使用具有40×40個圖像視圖的細胞。它看起來像SDWebImage will not run your completion block if the image is already cached,所以如果tableview重繪單元格並且圖像已經被緩存了,它永遠不會執行調整大小的代碼。您需要將代碼添加到您的cellForRowAtIndexPath方法,該方法檢查圖像是否已被緩存,然後是否調整圖像視圖的大小。

+0

感謝您的輸入。我注意到這是真的。如果已完成緩存,則完成塊將不會被調用。無論如何,我無法找到檢查圖像是否緩存的方式。你能指點我一些例子嗎?謝謝 –

+0

我只是想通了。完成塊實際上被調用。但是resize設置不正確的問題是因爲我在.xib文件中設置了自動佈局約束。現在我刪除它,它工作得很好。 –