2008-11-07 36 views
9

Tôi có một ô UITableView sẽ có kích thước thay đổi tùy thuộc vào nội dung của nó (có thể là một vài dòng văn bản).Có cách nào tốt hơn để xác định kích thước phù hợp cho UITableViewCell không?

SInce có vẻ như heightForRowAtIndexPath được gọi là trước khi Tôi bố cục ô, tôi chỉ đoán chiều cao chính xác bằng cách gọi [NSString sizeWithFont] trên chuỗi văn bản của tôi. Có cách nào tốt hơn để đặt chiều cao sau Tôi đã đặt ra văn bản trong ô và có ý tưởng chính xác kích thước của nó không?

Trả lời

8

Nó sẽ âm thanh câm, nhưng ... uh ... "bố trí di động của bạn trước khi bạn thoát khỏi heightForRowAtIndexPath";)

Nghiêm túc, mặc dù - OS chỉ bao giờ gọi này nếu nó sẽ là cần thiết (như trong: đó là về để tạo ra các tế bào & hiển thị nó trên màn hình), vì vậy đặt nó ra & sẵn sàng để hiển thị không phải là nỗ lực lãng phí.

Lưu ý, bạn thực hiện không phải phải làm bố cục của bạn một cách riêng biệt, logic-khôn ngoan. Chỉ cần thực hiện cuộc gọi đến [self prepLayoutForCellAtIndex: index] của bạn trong thường trình heightForRowAtIndexPath của bạn.

Nếu dữ liệu tĩnh, bạn có thể tạo bảng chiều cao và lưu trữ thông tin.

if (0 == heightTable[index]) { 
    heightTable[index] = [self prepLayoutForCellAtIndex:index]; 
} 
return (heightTable[index]); 

Heck, thậm chí nếu những thay đổi dữ liệu, bạn có thể tính toán lại giá trị bảng trong phương pháp mà thay đổi dữ liệu, hoặc rõ ràng là 0 để nó được tính lại lần sau nó là cần thiết.

4

tôi sử dụng những điều sau đây, thường là:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath { 
UITableViewCell *cell = [self tableView: tableView cellForRowAtIndexPath: indexPath]; 
return cell.bounds.size.height; 

}

Lưu ý rằng tôi sử dụng này cho các bảng, nơi tôi sẵn bộ nhớ cache một loạt các hàng trước thời hạn, không cho những người có một Lot ô. Tuy nhiên, đối với những thứ như bảng Cài đặt, nơi chỉ có một vài hàng, nhưng rất có thể có kích thước rất khác nhau, nó hoạt động tốt. Đối với các bảng lớn hơn, tôi làm điều gì đó theo những gì Olie đề nghị.

0

Nếu bạn xem SMS.app làm ví dụ, Apple lưu chiều cao hàng của ô trong cơ sở dữ liệu SMS.app sqlite.

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