2013-04-10 10 views
8

Mam tabelę z komórkami statycznymi. Dla jednej komórki chcę zmienić jej wysokość w zależności od wysokości etykiety (w tej komórce), a jednocześnie pozostawić wszystkie pozostałe wysokości komórek nienaruszone. Jak mogę uzyskać aktualną wysokość komórki? A może jest lepsze podejście?Bieżąca wysokość komórki w wysokościForRowAtIndexPath?

- (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

komórki idzie tam. 44 jeśli niczego nie zmieniłeś. – Desdenova

+0

Możesz również obliczyć rzeczywistą potrzebną wysokość komórki dla etykiety, używając rozszerzenia UIKIt do metody NSString "sizeWithFont:". –

Odpowiedz

12

Można zadzwonić:

[super tableView:tableView heightForRowAtIndexPath:indexPath] 

w bloku innego więc nie trzeba się martwić, jeśli kiedykolwiek zmienił domyślną wysokość.

4

można pobierać/domyślną wysokość tableView.rowHeight, lub można przechowywać swój wzrost komórek przed zmianą wysokości, dzięki czemu można uzyskać domyślną wysokość od jakiejś zmiennej;

1

Proszę zrobić ten

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

Ty, być może, aby obliczyć wysokość etykiety szerokości ograniczonym. W tym przypadku można utworzyć metodę tak:

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

i wykorzystać wynik w - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath. Nie zapomnij dodać wartości marży z twojej etykiety.

+0

Tak, thx, po prostu to zmienię =) – 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 wielki odpowiedź, oto dla Swift 3: Domyślna wysokość

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) 
    } 
} 
Powiązane problemy