Jak mogę zrobić, aby moje komórki były przerysowywane po obróceniu urządzenia?iOS - Redraw TableViewCells z dynamicznymi wysokościami komórek przy obrocie
Kiedy testuję na iPhonie, domyślna orientacja to portret, więc moje dynamiczne komórki są tak wysokie, jak powinny być, gdy urządzenie znajduje się w orientacji pionowej: oznacza to, że kiedy obracam się do krajobrazu, jest dużo pusta przestrzeń w komórce. Kiedy testuję na iPadzie, jest odwrotnie. Po obróceniu do orientacji pionowej część tekstu zostaje obcięta, ponieważ domyślnie jest to krajobraz. Mam oddzielne storyboardy dla obu urządzeniach, a oba kontrolery widoku są ustawione na „Orientacja: wnioskować”
(Portret)
(Pejzaż)
To, co się dzieje na iPhone - etykieta rozciągania ma ciemny czerwone tło, dzięki czemu można zobaczyć rzeczywisty rozmiar etykiety. Jednak wysokość komórki nie jest ponownie obliczana, a ponieważ dolne etykiety są ograniczone do dolnej części komórki, same znajdują się na samym dole. Jeśli dodać ograniczenie z etykiety rozciągania (jednego z tłem) do dolnej części komórki, wszystko robi to rozciągnąć etykietę tak:
(Label jest rozciągnięta)
Co to mówi to właśnie teraz nie jestem w stanie przekonać komórki do orientacji i przerysowywania, gdy tylko się zmienią. Oto mój kod heightForRowAtIndexPath
że jest obliczania wysokości komórki:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (!self.opCell)
{
self.opCell = [self.container dequeueReusableCellWithIdentifier:@"OPCell"];
}
self.opCell.opName.text = [[self.data objectAtIndex:indexPath.row] valueForKey:@"name"];
[self.opCell layoutIfNeeded];
CGFloat height = [self.opCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
return height + 1;
}
Do tej pory, aby go obrócić Próbowałem [self.container reloadData]
, gdzie zbiornik jest mój TableView
z willRotateToInterfaceOrientation
i didRotateToInterfaceOrientation
bezskutecznie. Próbowałem również umieścić go w viewDidLoad, tak aby może wykryć i załadować, gdy widok jest ładowany w trybie poziomym z prawidłową wysokością, ale to też nie działa. W przypadku iPhone'a, bez względu na to, co robię, ładuje wysokość dla widoku pionowego i nie aktualizuje się przy rotacji.
Znalazłem kilka pytań, które moim zdaniem mogłyby pomóc, ale nie mogę sprawić, że pracuję dla mnie this answer, mimo że wydaje mi się to samo pytanie, które mam, i wydaje się, że this one skupia się bardziej na szerokości komórki niż wysokość i nie jestem pewien, czy ma to zastosowanie w taki sam sposób.
Here to nawet samouczek, który, gdy uruchomiłem go na iPhonie, również nie zmienia rozmiaru TableViewCells podczas obracania.
This tutorial wydawało się mieć pewien wgląd w zmianę wysokości stołu, więc dodałem kod begin/endUpdates
do mojego didRotateToInterfaceOrientation
, myśląc, że może to spowodować zmianę, ale to nie działało tak dobrze.
Tak więc, jeśli ktoś ma jakieś sugestie lub zna rozwiązanie, byłoby to bardzo cenne, ponieważ trafiam na mur z tego!
Powinieneś przenieść rzeczy, które nie mają nic wspólnego z obliczeniem wysokości metody ... to byłby dobry początek. – nhgrif
Potrzebuję całego kodu w mojej metodzie heightForRowAtIndexPath. Muszę zadeklarować komórkę, zadeklarować tytuł, który chcę uczynić wysokością dynamiczną, a następnie powiedzieć, żeby obliczyć wysokość z 2 ostatnich linii. Komórki dynamiczne są trudniejsze, niż powinny, i to działa. –
To jest ładny samouczek, jak utworzyć dynamiczny tableViewCells. http://www.raywenderlich.com/73602/dynamic-table-view-cell-height-auto-layout – samir