Gerade ein sehr seltsames und unerwartetes Verhalten in der UITableView-Klasse gefunden. Ich brauche die letzte Tabellenzelle in meinem Abschnitt eine unterschiedliche Höhe von den anderen Zellen zu sein, also ich mache im Grunde diese:Aufruf von numberOfRowsInSection: from heightForRowAtIndexPath
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row == [tableView numberOfRowsInSection:indexPath.section] - 1)
return 44;
else
return 88; //double size for all but the last row
}
scheint ziemlich geradlinig, aber wenn ich es laufen lasse, erhalte ich eine unendliche Schleife und es stürzt ab. Ich habe festgestellt, dass, wenn ich numberOfRowsInSection:
aufrufen, ruft es die tableView: numberOfRowsInSection:
Methode meiner Datenquelle. Dies ist sinnvoll, da die Methode der tableView eine zwischengespeicherte Version des Datenquellenwerts zurückgibt, sodass sie den Wert aus der Datenquelle zum ersten Mal abrufen muss. Aber dann ruft es heightForRowAtIndexPath auf und übergibt es indexPath [0, 0] erneut! Und es macht das non-stop.
ich war in der Lage, um es zu erhalten, indem
[self tableView:tableView numberOfRowsInSection:indexPath.section]
statt mit (anstelle des Verfahrens der Tableview meine Datenquelle Methode aufrufen). Jeder hat eine Idee, warum es das tut? Ist das definiertes Verhalten? Oder ein Fehler in Apples TableView-Framework?
Scheint wie Apples interne Handhabung. Ich denke, wir würden einen Apple-Ingenieur brauchen, um diesen zu beantworten. – Altealice
sollten sie nicht Floats 44,0 und 88,0 sein? – railwayparade
Vielleicht wäre es auf diese Weise technisch effizienter, dem Compiler vorher zu sagen, dass es ein Float ist ... aber ich kann mir nicht vorstellen, dass es ein großer Leistungsunterschied ist; alle Floats, die ich am Ende einen Punkt 0 haben würde, sind so geschrieben, und ich habe keine Probleme festgestellt ... – GendoIkari