Anpassen von Elementen und der Höhe von UITableView bei scroll

Ich habe eine UITableView mit mehreren UILabels . Das Problem besteht darin, dass sich der Text in diesen Zellen dynamisch ändert, wenn ich Daten vom Server empfange. Es funktioniert gut, wenn ich den View-Controller lade. Beim Scrollen wird die Höhe der Zellen jedoch nicht aktualisiert, da heightForRowAtIndexPath nur einmal aufgerufen wird.

Hier sind die Screenshots:

Before Scrolling

After Scrolling

Wie ich im Screenshot gezeigt habe, verkleinert sich das Fragezeichen, was zu einer Lücke führt (durch den Pfeil gezeigt).

Hier ist mein cellForRowAtIndexPath :

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIndentifier = @"CustomCell";

    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIndentifier];
    if (cell == nil)
    {
        cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIndentifier];
    }

    cell.question.autoDetectLinks = YES;

   //Used to populate cell from NSDictionary
    [self setDataToCell:cell AtIndexPath:indexPath];

    return cell;
}

Hier ist der layoutSubviews meiner benutzerdefinierten Zelle:

- (void) layoutSubviews
{
    CGRect frame = self.question.frame;
    frame.size.width = 277.0f; //you need to adjust this value
    self.question.frame = frame;
    self.question.numberOfLines = 2;

    [self.question sizeToFit];
   //Place time below question
    CGRect timeFrame = self.time.frame;
    timeFrame.origin.y = self.question.frame.origin.y + self.question.frame.size.height + 5;
    self.time.frame = timeFrame;
    [self.time sizeToFit];
}

Um diese Situation anzugehen, rief ich an

[self.tableView beginUpdates];
[self.tableView reloadRowsAtIndexPaths:@[_tableIndexPath] withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates]; 

in - (void) scrollViewDidScroll: (UIScrollView *) scrollView Dies löst mein Problem, reduziert aber die Leistung und die Elemente springen herum, bevor sie sich setzen, selbst nachdem die Animation als UITableViewRowAnimationNone festgelegt wurde. Gibt es einen besseren Weg? Soll ich reloadRowsAtIndexPaths woanders aufrufen?

Vielen Dank.

0
Ich habe die Frage bearbeitet. Hinzugefügt es.
hinzugefügt der Autor Anil, Quelle
füge dein - (UITableViewCell *) cellForRowAtIndexPath hinzu: (NSIndexPath *) indexPath; Code.
hinzugefügt der Autor NANNAV, Quelle

1 Antworten

Ok here come the edited answer: The problem is your sizeToFit in your layoutSubviews. Just follow this link to resolve your issue: here

If you also want the cell and the label to dynamically resize to their corresponding text but at the same time your timelabel to be directly underneath it you will have to determine the size of your uilabel based on the text, font and font-size. See here for more information: here

0
hinzugefügt
Ich mache das. Aber das aktualisiert nicht die Frames der Zellen, die nicht sichtbar sind.
hinzugefügt der Autor Anil, Quelle
Die Rahmenanpassung erfolgt in meinem heightForRowAtIndexPath
hinzugefügt der Autor Anil, Quelle
Ich habe das in meinem LayoutSubviews in meiner CustomCell-Klasse getan. Aktualisiere die Frage jetzt.
hinzugefügt der Autor Anil, Quelle
Es tut uns leid. Das hilft nicht
hinzugefügt der Autor Anil, Quelle
hinzugefügt der Autor Anil, Quelle
immer noch nicht in der Lage, dieses Problem zu lösen
hinzugefügt der Autor Anil, Quelle
Ist numberOfLines für das Label auf 0 gesetzt? Wo erstellen Sie das Label, hilft der CellForRowAtIndexPath nicht, da Sie das Label in diesem Code nicht verwenden.
hinzugefügt der Autor dehlen, Quelle
Siehe meine bearbeitete Antwort.
hinzugefügt der Autor dehlen, Quelle
whats mit der Antwort in den Link ich zur Verfügung gestellt, wenn Sie sizeToFit ändern hilft das?
hinzugefügt der Autor dehlen, Quelle