ja przeciążenia metody delegata -tableView:heightForRowAtIndexPath:
i korzystania -sizeWithFont:constrainedToSize:
programowo ustawić wysokość komórki, na podstawie tekstu w komórce:Resetowanie niestandardowych UITableViewCell wysokość, gdy iPhone jest obracany
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
switch (indexPath.section) {
case(kAboutViewOverviewSection): {
switch (indexPath.row) {
case(kAboutViewOverviewSectionRow): {
NSString *text = NSLocalizedString(@"kAboutViewOverviewSectionFieldText", @"");
CGSize s = [text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(280, 500)];
return s.height + 13;
}
default: {
break;
}
}
break;
}
default: {
break;
}
}
return 44.0;
}
Działa gdy stół jest najpierw narysowany. Jednak po zmianie orientacji urządzenia, z pionowej na poziomą wysokość komórki się nie zmienia.
próbowałem przesłanianie metody -shouldAutorotateToInterfaceOrientation:
w moim stole widoku kontrolera:
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
[self.tableView reloadData];
return YES;
}
ten powinien przeładować dane tabeli i (przypuszczalnie) przerysować poglądy komórka tabeli. Ale to nie ma żadnego efektu.
Czy istnieje sposób na wymuszenie odświeżania komórki z nową wysokością, gdy urządzenie jest obracane?
EDIT: Próbowałem następujące, bez skutku:
- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
[self.tableView reloadData];
}
Oto co aplikacja wygląda jak w orientacji pionowej:
Oto co aplikacja wygląda jak w orientacji poziomej:
Występuje luka między górną i dolną krawędzią treści.
EDIT 2:
Regulacja parametru size poprzez szerokości ramy stołu pomógł rozwiązać ten problem wyświetlania:
CGSize s = [text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake([tableView frame].size.width,500)];
Próbowałem -reloadData. –
Próbowałem -reloadSections: withRowAnimation: w metodzie -shouldAutorotateToInterfaceOrientation: metoda i to nie działa, albo. –
Te wszystkie działają, jeśli zostaną wywołane po zmianie rozmiaru widoku. Oznacza to, że powinny znajdować się w Twojej usłudze didRotateFromInterfaceOrientation: – rpetrich