搜尋此網誌

2012年7月26日 星期四

(IOS)動態調整 UITableViewCell 的高度

轉貼:http://gibuloto.com/blog/uitableviewcell-auto-height/


動態調整 UITableViewCell 的高度假設有一個這樣的 custom UITableViewCell:


因為評論的內容可能有好幾行,高度不一定,所以要做以下的處理:
in CommentCell.m




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#import "CommentCell.h"

@implementation CommentCell

@synthesize avatarImageView, userNameLabel, timeLabel, commentTextLabel;
@synthesize comment, delegate;

- (void)awakeFromNib
{
    [super awakeFromNib];
}

#pragma mark - UI

- (void)fillInfo
{
    // ...

    // 評論
    NSString *content = [comment objectForKey:@"content"];
    double labelHeight = [self getCellHeight];
    self.commentTextLabel.numberOfLines = 0; // 默認值只有 1 行
    self.commentTextLabel.text = content;
    self.commentTextLabel.frame = CGRectMake(self.commentTextLabel.frame.origin.x,
                                             self.commentTextLabel.frame.origin.y,
                                             self.commentTextLabel.frame.size.width,
                                             labelHeight);
}

- (float)getCellHeight
{
    NSString *content = [self.comment objectForKey:@"content"];
    double commentTextLabelWidth = self.commentTextLabel.frame.size.width; // 必須給定一個固定的寬度,才能計算可變的高度
    CGSize constraint = CGSizeMake(commentTextLabelWidth, CGFLOAT_MAX);
    CGSize size = [content sizeWithFont:self.commentTextLabel.font
                      constrainedToSize:constraint
                          lineBreakMode:UILineBreakModeWordWrap];

    double minCommentTextLabelHeight = 22.0;
    CGFloat height = MAX(size.height, minCommentTextLabelHeight);

    return height;
}

@end

in CommentViewController.m


1
2
3
4
5
6
7
8
9
10
11
12
13
14
#pragma mark - UITableView

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (self.comments.count > 0) {
        CommentCell *testCommentCell = [[CommentCell alloc] init];
        testCommentCell.comment = [self.comments objectAtIndex:indexPath.row];

        return 68 + [testCommentCell getCellHeight] + 10;
    }
    else {
        return 100;
    }
}


沒有留言:

張貼留言