Mam dynamiczny niestandardowy UITableViewCell
, który korzysta z automatycznego układu.Preferowane podejście do zmiany treści UITableViewCell na podstawie szerokości komórki
Zmieniam zawartość tekstu etykiety, w zależności od szerokości komórki.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
...
cell.someLabel.text = CGRectGetWidth(cell.bounds) < 321 ? @"Concise" : @"Much longer blurb";
return cell;
}
reloadData
jest wywoływana podczas zmiany orientacji, aby zaktualizować etykietę.
Podczas gdy to się dzieje, wyobrażam sobie, że istnieje lepszy sposób na poradzenie sobie z tym, co nie wiąże się z koniecznością ponownego załadowania tableView.
(Żaden z ograniczeniami muszą zostać zmienione. Etykieta jest w tym samym miejscu, ale po prostu pokazuje inną treść, gdy nie ma już miejsca dla niego.)
Mam podklasa
UILabel
i zmienić tekst w-didMoveToSuperview
?Czy można zmienić tekst w
-layoutSubViews
? (Czy nie spowodowałoby to przejścia przez inny układ, ponieważ tekst został zmieniony?)
Dzięki za wszelkie odpowiedzi!
"nie wiąże się z przeładowaniem tableView" Myślę, że pierwszą rzeczą do zrobienia jest ponowne przemyślenie, dlaczego uważasz, że ponowne załadowanie widoku tabeli jest "napowietrzne". Jest dość wydajny, ponieważ tylko widoczne dane komórki tabeli są faktycznie pobierane - a twój model danych powinien być całkowicie sprawny lub robisz to źle. – matt
To po prostu wydaje się przesadą, Matt. Auto-layout już się dzieje, w wyniku automatycznego obrotu i domyślam się, że można go obsłużyć w ramach już istniejącego przejścia do layoutu. Po prostu nie wiem wystarczająco dużo o automatycznym layoucie, aby wiedzieć, jak powinna to zrobić komórka lub etykieta. –
Ale nie wspomnę o subtelnym migotaniu reloadu, którego nie zobaczyłbyś bez przeładowania. Byłoby ładniej, gdybym nie musiał przeładowywać stołu, a on po prostu automatycznie się obracał i reduował (z inną zawartością). Możliwy? –