Mam pewne problemy zaimplementowane dynamiczne wysokości rzędów w UITableView - ale to nie komórki, z którymi mam problem, to UILabel wewnątrz komórki.UILabel w UITableViewCell o dynamicznej wysokości
W komórce znajduje się tylko UILabel do wyświetlenia tekstu. Moja tableView: heightForRowAtIndexPath: poprawnie zmienia rozmiar każdej komórki poprzez obliczenie wysokości etykiety, która będzie w nim za pomocą metody sizeWithFont: NSString.
Posiadam podklasę obiektu UITableViewCell, który zawiera właściwość UILabel, która jest podłączona do storyboardu. W scenorysie ustawiłem linie na 0, więc użyje ona tyle linii, ile potrzebuje, i ustawiłem jej linię na Zawijanie słów.
Oto jak ja utworzenie komórek:
- (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;
}
Kiedy budować to, mam moim stole widok z komórką wszystko o wymiarach do odpowiedniej wysokości za ich treść, ale etykiety są wszyscy 1 linia, która biegnie z boku komórek. Jeśli jednak przewinę tabelę, aby komórki opuściły ekran, a następnie przewijają do nich, ich etykieta zostanie odpowiednio zmieniona, a komórka będzie wyglądać, jak początkowo oczekiwałam.
Próbowałem także obliczyć ramkę z etykietami za pomocą tej samej metody, z której obliczam wysokość wiersza, i otrzymuję to samo zachowanie - nie rysuje poprawnie, dopóki nie przewinie ekranu i nie włączy się ponownie.
Znalazłem dwa sposoby obejścia tego problemu i żadne z nich nie są akceptowalne.
Po pierwsze, jeśli w viewDidAppear: Wywołuję reloadData w moim widoku tabeli, komórki i etykiety losują się poprawnie za pierwszym razem. To nie zadziała w mojej sytuacji, ponieważ będę dodawał i usuwał komórki do tej tabeli i nie chcę wywoływać polecenia reloadData za każdym razem, gdy dodawana jest komórka.
Drugie rozwiązanie wydaje mi się bardzo dziwne - jeśli zostawiam ustawienia czcionki domyślną czcionką systemową 17 na UILabel, komórki rysują się poprawnie. Gdy tylko zmieniam rozmiar czcionki, powraca ona do zachowania polegającego na tym, że nie rysuje poprawnie etykiety, dopóki nie opuści ekranu i nie wróci, lub zostanie wywołana funkcja reloadData wywoływana w tableView.
Byłbym wdzięczny za pomoc w tej sprawie.
Ten post poprawnie odpowiada na problem: http://stackoverflow.com/questions/8903369/dynamic- uitableviewcell-height. Może to być trochę trudne, jeśli nigdy wcześniej nie tworzyłeś dynamicznie wielkości komórek, ale nie jest to zbyt trudne. – macandyp
Nie rozumiem, jak kod w tej odpowiedzi robi coś innego niż to, co robię. JESTEM ustawianie ramki mojej etykiety w komórceForRowAtIndexPath, ale nie stosuje tej ramki, dopóki nie zostanie ponownie wyrysowany. Czy może czegoś brakuje? – alivingston
Czy wdrażasz heightForRowAtIndexPath? – macandyp