2013-07-17 4 views
0

xib 파일에서 만든 사용자 지정 UITableViewCell이 있습니다. 그리고 난 고정 폭 및 높이를 설정 40x40 숨겨진UIImageView의 너비와 높이가 tableViewCell에서 동적으로 변경됩니다.

설정 그 셀 내부와 다음 cellForRowAtIndexPath 데이터 소스 대리자 UIImageView에있다. 해당 셀의 데이터 소스에 이미지 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

나는 그것이 40x40 이미지보기가 세포를 중복 사용의 tableview 함께 할 수있는 뭔가가 생각한다. SDWebImage will not run your completion block if the image is already cached 인 것처럼 보이므로 테이블 뷰가 셀을 다시 그리면 이미지가 이미 캐시 된 경우에는 크기 조정 코드가 실행되지 않습니다. 이미지가 이미 캐시되었는지 확인하고 코드가 이미지보기의 크기를 조정하는지 확인하는 코드를 cellForRowAtIndexPath 메서드에 추가해야합니다.

+0

입력 해 주셔서 감사합니다. 나는 이것이 사실임을 알아 차린다. 완료 블록은 이미 캐시 된 경우 절대로 호출되지 않습니다. 어쨌든, 나는 이미지가 캐쉬되어 있는지 확인하는 방법을 찾을 수 없다. 몇 가지 예를 들어 주시겠습니까? 고맙습니다. –

+0

방금 ​​알아 냈습니다. 완료 블록이 실제로 호출됩니다. 그러나 크기 조정이 제대로 설정되지 않은 문제는 .xib 파일에 autolayout 제약 조건이 설정되어 있기 때문입니다. 이제 제거하고 잘 작동합니다. –

관련 문제