Tôi đang gặp một số vấn đề đã triển khai chiều cao hàng động trong một UITableView - nhưng nó không phải là các ô mà tôi đang gặp vấn đề, đó là UILabel bên trong ô.UILabel trong một UITableViewCell Với chiều cao động
Ô chỉ chứa UILabel để hiển thị văn bản. TableView của tôi: heightForRowAtIndexPath: là thay đổi kích thước chính xác mỗi ô bằng cách tính chiều cao của nhãn sẽ nằm trong nó bằng cách sử dụng phương thức sizeWithFont: của NSString.
Tôi có một lớp con của UITableViewCell chỉ giữ thuộc tính UILabel được nối trong bảng phân cảnh. Trong bảng phân cảnh, tôi đã thiết lập các dòng của nó thành 0 vì vậy nó sẽ sử dụng nhiều dòng như nó cần, và tôi đã thiết lập lineBreak của nó thành Word Wrap.
Dưới đây là cách tôi đang thiết lập các tế bào:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
ExpandCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
SomeObject *object = self.tableObjects[index.row];
cell.myLabel.text = [object cellText];
[cell.myLabel sizeToFit];
return cell;
}
Khi tôi xây dựng này, tôi nhận được cái nhìn bàn của tôi với của tế bào tất cả các kích thước với chiều cao chính xác cho nội dung của họ, mặc dù các hãng đều 1 dòng chỉ chạy bên cạnh các ô. Tuy nhiên, nếu tôi cuộn bảng để ô rời khỏi màn hình và sau đó cuộn lại cho chúng, nhãn của chúng sẽ được định lại kích thước chính xác và ô sẽ trông như thế nào tôi dự kiến ban đầu.
Tôi cũng đã thử tính toán khung nhãn với cùng phương pháp Tôi tính chiều cao hàng với và tôi nhận được cùng một hành vi - nó không vẽ chính xác cho đến khi nó cuộn ra khỏi màn hình và bật lại.
Tôi đã tìm thấy hai cách để giải quyết vấn đề này và không phải là giải pháp có thể chấp nhận được.
Đầu tiên, nếu ở chế độ xemDidAppear: Tôi gọi reloadData trên chế độ xem bảng, các ô và nhãn vẽ chính xác lần đầu tiên. Điều này sẽ không làm việc cho tình hình của tôi bởi vì tôi sẽ thêm và loại bỏ các tế bào vào bảng này, và tôi không muốn gọi reloadData mỗi khi một tế bào được thêm vào.
Cách giải quyết thứ hai có vẻ rất lạ đối với tôi - nếu tôi để cài đặt phông chữ ở System Font 17 mặc định trên UILabel, các ô sẽ tự vẽ chính xác. Ngay sau khi tôi thay đổi kích thước phông chữ, nó trở lại hành vi của nó không vẽ một nhãn chính xác cho đến khi nó rời khỏi màn hình và quay trở lại, hoặc được tải lạiData được gọi trên tableView.
Tôi đánh giá cao bất kỳ trợ giúp nào về vấn đề này.
bài này trả lời một cách chính xác vấn đề của bạn: http://stackoverflow.com/questions/8903369/dynamic- uitableviewcell-chiều cao. Nó có thể hơi rắc rối nếu bạn chưa từng tạo ra các ô có kích thước động trước đây, nhưng không quá khó. – macandyp
Tôi không hiểu làm thế nào mã trong câu trả lời đó là làm bất cứ điều gì khác với những gì tôi đang làm. Tôi đang thiết lập khung của nhãn của tôi trong cellForRowAtIndexPath, nhưng nó không áp dụng khung đó cho đến khi nó được vẽ lại lần sau. Hay tôi đang thiếu một cái gì đó? – alivingston
Bạn có đang triển khai heightForRowAtIndexPath không? – macandyp