2013-04-10 26 views
8

Tôi có một bảng với các ô tĩnh. Đối với một ô tôi muốn thay đổi chiều cao của nó tùy thuộc vào chiều cao của nhãn (bên trong ô đó) và đồng thời để nguyên tất cả các chiều cao của ô khác. Làm thế nào tôi có thể nhận được chiều cao của tế bào hiện tại? Hoặc có thể có cách tiếp cận tốt hơn?Chiều cao ô hiện tại bên trong heightForRowAtIndexPath?

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if ([indexPath section] == 2) { 
     return self.myLabel.frame.origin.y *2 + self.myLabel.frame.size.height; 
    } else { 
     return ...; // what should go here, so the cell doesn't change its height? 
    } 
} 
+3

của tế bào của bạn đi ở đó. 44 nếu bạn không thay đổi gì cả. – Desdenova

+0

Bạn cũng có thể tính toán chiều cao cần thiết thực tế của ô đối với nhãn bằng cách sử dụng phần mở rộng của UIKIt đối với phương thức NSString 'sizeWithFont:'. –

Trả lời

12

Bạn có thể gọi:

[super tableView:tableView heightForRowAtIndexPath:indexPath] 

trong khối khác, do đó bạn không cần phải lo lắng nếu bạn đã bao giờ thay đổi chiều cao mặc định.

4

Bạn có thể nhận/thiết lập chiều cao mặc định tableView.rowHeight, hoặc bạn có thể lưu trữ chiều cao của bạn trước khi thay đổi chiều cao di động, vì vậy bạn có thể nhận được chiều cao mặc định từ một số biến;

1

Hãy làm điều này một

if ([indexPath section] == 2) 
{ 
    if(indexPath.row == 1) 
     return self.myLabel.frame.origin.y *2 + self.myLabel.frame.size.height; 
    else 
     tableView.rowHeight 
} 
0

Bạn, có lẽ, muốn tính toán chiều cao của nhãn rộng bó buộc. Trong trường hợp này, bạn có thể tạo phương thức như sau:

- (CGFloat)textHeightOfMyLabelText { 
    CGFloat textHeight = [self.myLabel.text sizeWithFont:self.myLabel.font constrainedToSize:LABEL_MAX_SIZE lineBreakMode:self.myLabel.lineBreakMode].height; 
    return textHeight; 
} 

và sử dụng kết quả là - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath. Đừng quên thêm giá trị ký quỹ của nhãn bạn.

+0

Yeah, thx, tôi sẽ thay đổi nó =) – Ossir

0
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.section == youSectionNumber) 
    { 
     if (indexPath.row == numberOfrow) 
     { 
      return self.myLabel.frame.origin.y *2 + self.myLabel.frame.size.height; 
     } 
    } 

     return 44; // it is default height of cell; 
} 
1

@talnicolas câu trả lời tuyệt vời, đây là cho Swift 3: chiều cao mặc định

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    if indexPath.section == 2 { 
     let easy = self.myLabel.frame 
     return easy.origin.y *2 + easy.size.height 
    } else { 
     return super.tableView(tableView, heightForRowAt: indexPath) 
    } 
} 
Các vấn đề liên quan