Gonna trả lời câu hỏi của riêng tôi ở đây:
Nguyên Tôi khá chắc chắn rằng các tính toán chiều cao được gắn liền với phương pháp tableView:cellForRowAtIndexPath:
, và không thể di chuyển nơi khác. Với một loạt các cơ cấu lại, mặc dù, tôi đã có thể nhận được rằng công cụ ra khỏi đó và vào tableView:heightForRowAtIndexPath:
, mà giải quyết tất cả mọi thứ.
Đối với bất kỳ ai khác đang cố gắng để có được các tế bào tự động chiều cao điều chỉnh để làm việc, đây là một số mã có thể giúp:
// Inside tableView:cellForRowAtIndexPath:
cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
cell.textLabel.numberOfLines = self.numberOfTextRows;
// numberOfTextRows is an integer, declared in the class
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
CGSize theSize = [theObject.theStringToDisplay sizeWithFont:[UIFont systemFontOfSize:18.0f] constrainedToSize:CGSizeMake(265.0f, 9999.0f) lineBreakMode:UILineBreakModeWordWrap];
// This gets the size of the rectangle needed to draw a multi-line string
self.numberOfTextRows = round(theSize.height/18);
// 18 is the size of the font used in the text label
// This will give us the number of lines in the multi-line string
if ((indexPath.section == FIXED_HEIGHT_SECTION) || (self.numberOfTextRows < 2)) {
return 44;
// 44 is the default row height; use it for empty or one-line cells (or in other table sections)
} else {
return theSize.height + 16;
// 16 seems to provide a decent space above/below; tweak to taste
}
}
Nếu bạn có thể nghĩ ra một cách chính xác hơn để tính toán chiều cao di động thích hợp, Tôi là tất cả tai. :)
Tôi không thực sự chắc chắn lý do tại sao bạn chia chiều cao trực tiếp cho 18 và sau đó nhân nó một lần nữa, nhưng khác hơn là tôi làm điều đó khá nhiều theo cùng một cách. –
Vâng, bộ phận đầu tiên là tìm ra bao nhiêu hàng là cần thiết, vì vậy tôi có thể đặt chính xác 'cell.textLabel.numberOfLines'; nếu tôi không đặt nó, tất cả sẽ được in trên một dòng. Nhưng yeah, tôi đoán tôi chỉ có thể sử dụng 'theSize.height' trong bit cuối cùng ở đó, thay vì' self.numberOfTextRows'. – Triz
Đã chỉnh sửa câu trả lời cho sự rõ ràng và đơn giản hóa. Hoạt động thực sự tốt ngay bây giờ. – Triz