2009-03-25 36 views
19

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!

+0

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

Trả lời

8

Thở dài. Hóa ra tôi không chỉnh sửa tất cả các thuộc tính vừa đủ tốt. Nhưng ít nhất tôi cũng loại bỏ lỗi đó. :)

Hành vi này đã được khắc phục bằng cách đảm bảo kiểm tra thuộc tính "Clip Subviews" của UITableViewCell.

Hành vi này xảy ra khi tuyên bố nhãn văn bản tweet của tôi có chiều cao tối đa cần thiết - khi các bản xem trước của ô bảng không bị cắt bớt, nhãn trong ô ở trên sẽ hiển thị phần trên của ô bên dưới. Điều này không hiển thị trên lần hiển thị đầu tiên của màn hình do thứ tự mà SDK hiển thị các ô - hướng xuống - và cách nó ngăn xếp mỗi ô ở phía trên.

Các vấn đề liên quan