Jak dynamicznie zmieniać rozmiar uitableviewcell height
Mam klasyczny pogrupowany UITableView z edytowalnymi Uitextviewami wewnątrz każdej komórki. Te widoki tekstu mogą być pojedyncze lub Wielowierszowe i chcę, aby komórka zwiększała swoją wysokość, gdy użytkownik pisze, a tekst rozpoczyna nową linię.
Moje pytanie brzmi: Czy muszę przeładować całą tabelę tylko po to, aby zwiększyć wysokość komórki? Nie ma innej metody?
Szukałem dużo, a poprzednie odpowiedzi i tutoriale mówią tylko o tym, jak obliczyć wysokość tekstu, jak wdrożyć heightForRowAtIndexPath... rzeczy, które już wiem. Moim zmartwieniem jest to, że, aby osiągnąć to, co chcę, będę musiał obliczyć wysokość i przeładować tabelę za każdym razem, gdy użytkownik wejdzie nowy znak, który nie uważam za bardzo czysty i skuteczny.
Dzięki.4 answers
Nie zawsze trzeba przeładowywać całą tabelę. Zamiast tego możesz po prostu przeładować ten jeden wiersz.
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-18 13:57:35
[tableView beginUpdates];
[tableView endUpdates];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-14 15:18:20
Aby być bardziej szczegółowym, tak, musisz zaimplementować tableView:heightForRowAtIndexPath:
, Aby obliczyć nową wysokość, a następnie wykonać jak mówi rickharrison i zadzwonić [tableView reloadRowsAtIndexPaths:withRowAnimation]
. Powiedzmy, że twoje komórki mogą mieć rozszerzoną wysokość i normalną wysokość, i chcesz, aby rosły po naciśnięciu. Można zrobić:
-(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*) indexPath
{
if ([expandedPaths containsObject:indexPath]) {
return 80;
} else {
return 44;
}
}
-(void)tableView:(UITableView*) didSelectRowAtIndexPath:(NSIndexPath*) indexPath
{
[expandedPaths addObject:indexPath];
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-22 03:47:52
-reloadRowsAtIndexPaths:withRowAnimation
nie zmieniłem rozmiaru UITableViewCell wysokości, nawet po zmianie ramki komórki. Zadziałało tylko wtedy, gdy podążałem za nim -reloadData
:
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
[tableView reloadData];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-03 20:43:28