2012-06-14 3 views
0

각 테이블 셀에 "Book name"과 "Book description"이 포함 된 tableView 목록이있는 tableView가 있습니다. 셀의 높이는 책 설명의 길이에 따라 결정되므로 셀 높이가 다릅니다.배경 이미지 및 동적 높이가있는 UITableViewCell

모든 셀에는 물론 셀 높이에 따라 녹말 배경 이미지가 있습니다.

나는 다음과 같이 셀의 drawRect에서 배경 이미지를 그리기 해요 :

이 코드는 작동
- (void)drawRect:(CGRect)rect 
{ 
    UIImage *bgImage = [UIImage imageNamed:@"cell_BG.png"]; 
    bgImage = [bgImage stretchableImageWithLeftCapWidth:60.0 topCapHeight:60.0]; 
    [bgImage drawInRect:rect]; 
} 

는, 문제는, 스크롤 성능이다 나는 그것이 싶습니다으로 부드러운 아니다.
주요 문제는 높이가 변하는 것으로 나타났습니다. 재사용 가능한 셀을 포함하여 모든 셀에 대해 drawRect 호출을 트리거하는 것 같습니다. (필자는 스크롤 성능이 대폭 향상 모든 셀에 대해 동일한 높이를 설정하려고하지만 동적 높이 ... 사용해야하는 경우)

이 할 수있는 더 좋은 방법이 있나요을
그래서 테이블 스크롤 개선 할 것인가?

답변

1

drawRect가 꽤 비싸기 때문에 UITableViewCell의보기에 대해 drawRect를 재정의하고 싶지는 않을 것입니다.

UIImageView을 프로토 타입 셀 위에 놓고 그 이미지를 설정해보십시오 (프로그래밍 방식으로 만들거나 인터페이스 빌더에서 드래그 할 수 있음). 그런 다음 이미지 뷰의 프레임 크기를 해당 UITableViewCell의 동적 높이와 일치하도록 설정할 수 있습니다. UIImageView은 이미지에 최적화되어있어이 접근 방식이 더 매끄럽게 실행되어야합니다.

UITableViewController의 cellforRowAtIndexPath 메소드에서 imageView의 이미지 및 프레임 크기를 설정할 수 있습니다.

업데이트 : 콘텐츠 모드를 설정하여 이미지 크기를 조정하고 싶을 수도 있습니다.

UIView 클래스 참조에서 : "contentMode -보기의 프레임과 반대되는보기의 내용에 대한 레이아웃 동작을 제공하며,보기에 맞게 내용의 크기가 조정되는 방식 및 캐시되거나 다시 그려지는 방식에 영향을줍니다 . "

예를 들어보기 프레임이 변경 될 때마다 다시 그리기 drawRect가 호출됩니다.

그것은 프로그래밍 방식으로 설정할 수 있습니다

UIView* view = [[UIView alloc] initWithFrame:CGRectMake...etc]; 
view.contentMode = UIViewContentModeRedraw; // for example 

하거나 인터페이스 빌더에서 뷰를 선택하고 속성 관리자의 내용 모드 속성을 설정하여

. 나는 UIContentModeScaleToFit 또는 그와 비슷한 것을 찾고 있다고 생각합니다. 또한 인터페이스 빌더를 사용하여 UIImageView의 스트럿과 스프링을 크기 검사기에서 확인하십시오.

+0

"... drawRect는 꽤 비쌉니다."- 내가 아는 바로는 일반적으로 drawRect를 재정 의하여 셀에 하위 뷰를 추가하는 대신 성능이 향상됩니다. 하지만 당신의 접근 방식을 시도하고 볼 것입니다 ... – Eyal

+0

drawRect는 일반적으로 CoreGraphics 또는 다른 라이브러리를 사용하여 사용자 지정 드로잉에 대한 진입 점입니다, UIImageViews로 이미지를보다 효율적으로 처리 할 수 ​​있습니다. – Patrick

+0

도 도움이 될 수 있습니다. http://stackoverflow.com/questions/5656014/why-does-drawrect-scroll-slower-than-uiimageview-for-large-images-in-custom-uita – Patrick

관련 문제