UItable ViewCell 높이를 동적으로 조정하는 방법

2166 단어
때때로 우리는 UItable ViewCell의 높이를 동태적으로 조정해야 한다. 내용에 따라 서로 다른 높이를 설정해야 한다. 이전에 실현 방법을 보았는데 좀 번거롭게 썼는데 구체적인 주소를 찾지 못했다. 여기에 더 좋은 (적어도 내 생각에는) 코드가 하나 있는데 일부 코드를 공유해 보자.
2012.03.11 업데이트: 1년 후에 어린 시절의 코드를 살펴보니 Height For Row At Index Path의 실현 방법이 확실히 좋지 않다. dequeue에서 Reuse할 수 있는cell이 떨어지면서 항상 새로운cell을 만들어야 하기 때문에 효율적인 문제를 초래할 수 있다. 가장 좋은 것은 NSString의size With Font: for Width:line Break Mode: 이 일련의 방법으로 label의 높이를 계산하는 것이다.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
 
    static NSString *CellIdentifier = @"Cell";
 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
		UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero];
		label.tag = 1;
		label.lineBreakMode = UILineBreakModeWordWrap;
		label.highlightedTextColor = [UIColor whiteColor];
		label.numberOfLines = 0;
		label.opaque = NO; //   Opaque                 
		label.backgroundColor = [UIColor clearColor];
		[cell.contentView addSubview:label];
		[label release];
    }
 
    UILabel *label = (UILabel *)[cell viewWithTag:1];
	NSString *text;
	text = [textArray objectAtIndex:indexPath.row];
    CGRect cellFrame = [cell frame];
	cellFrame.origin = CGPointMake(0, 0);
 
	label.text = text;
	CGRect rect = CGRectInset(cellFrame, 2, 2);
	label.frame = rect;
	[label sizeToFit];
	if (label.frame.size.height > 46) {
		cellFrame.size.height = 50 + label.frame.size.height - 46;
	}
	else {
		cellFrame.size.height = 50;
	}
	[cell setFrame:cellFrame];
 
    return cell;
}
 
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
	UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
        //UITableViewCell *cell = [self cellForRowAtIndexPath:indexPath];
	return cell.frame.size.height;
}

게시물:http://longtimenoc.com/archives/%E5%8A%A8%E6%80%81%E8%B0%83%E6%95%B4uitableviewcell%E9%AB%98%E5%BA%A6%E7%9A%84%E5%AE%9E%E7%8E%B0%E6%96%B9%E6%B3%95

좋은 웹페이지 즐겨찾기