Tôi đang xây dựng một ứng dụng Twitter nhỏ bé nhỏ xíu trên iPhone. Đương nhiên, tôi đang hiển thị các tweet trong một UITableView, và tất nhiên chúng có độ dài khác nhau. Tôi đang tự động thay đổi chiều cao của các tế bào dựa trên văn bản khá tốt:UITableView với chiều cao ô động - tôi cần phải làm gì để sửa lỗi cuộn xuống?
- (CGFloat)heightForTweetCellWithString:(NSString *)text {
CGFloat height = Buffer + [text sizeWithFont:Font constrainedToSize:Size lineBreakMode:LineBreakMode].height;
return MAX(height, MinHeight);
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *text = // get tweet text for this indexpath
return [self heightForTweetCellWithString:text];
}
}
Tôi đang hiển thị các tế bào tweet thực tế bằng cách sử dụng thuật toán trong sách PragProg:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"TweetCell";
TweetCell *cell = (TweetCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [self createNewTweetCellFromNib];
}
cell.tweet.text = // tweet text
// set other labels, etc
return cell;
}
Khi tôi khởi động lên, tất cả các tweets hiển thị chỉ hiển thị tốt. Tuy nhiên, khi tôi cuộn xuống, các mẩu tin dưới đây khá lộn xộn - có vẻ như một khi một ô đã cuộn ra khỏi màn hình, chiều cao của ô trên màn hình sẽ bị thay đổi kích thước thành lớn hơn và phải che khuất một phần ô bên dưới. Khi ô đạt đến đỉnh của chế độ xem, ô sẽ tự đặt lại và hiển thị chính xác. Cuộn lên không có khó khăn.
Dưới đây là một đoạn video cho thấy điều này trong hành động: http://screencast.com/t/rqwD9tpdltd
Tôi đã thử khá một chút đã: thay đổi kích thước khung của tế bào trên tạo ra, sử dụng định danh khác nhau cho các tế bào với độ cao khác nhau (ví dụ [NSString stringWithFormat:@"Identifier%d", rowHeight]
), thay đổi thuộc tính trong Interface Builder ...
Nếu có thêm đoạn mã tôi có thể đăng, vui lòng cho tôi biết. Cảm ơn trước sự giúp đỡ của bạn!
Giá trị cho "kích thước" và "phông chữ" trong ví dụ của bạn là gì? Tôi tò mò muốn xem thêm một chút mã. – Moshe