406 Stimmen

Können Sie eine Höhenänderung auf eine UITableViewCell animieren, wenn ausgewählt?

Ich benutze eine UITableView in meiner iPhone-App, und ich habe eine Liste von Personen, die zu einer Gruppe gehören. Ich möchte es so, dass, wenn der Benutzer auf eine bestimmte Person klickt (also die Zelle auswählen), die Zelle in der Höhe wächst, um mehrere UI-Steuerelemente für die Bearbeitung der Eigenschaften dieser Person anzuzeigen.

Ist dies möglich?

0voto

Septronic Punkte 1088

Ich habe @Joys großartige Antwort verwendet, und es hat perfekt mit ios 8.4 und XCode 7.1.1 funktioniert.

Für den Fall, dass Sie Ihre Zelle umschaltbar machen wollen, habe ich die -tableViewDidSelect in die folgende geändert:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
//This is the bit I changed, so that if tapped once on the cell, 
//cell is expanded. If tapped again on the same cell, 
//cell is collapsed. 
    if (self.currentSelection==indexPath.row) {
        self.currentSelection = -1;
    }else{
        self.currentSelection = indexPath.row;
    }
        // animate
        [tableView beginUpdates];
        [tableView endUpdates];

}

Ich hoffe, dies hat Ihnen geholfen.

0voto

Govind Punkte 2279

Prüfen Sie diese Methode nach iOS 7 und später.

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return UITableViewAutomaticDimension;
}

In iOS 8 wurden diesbezüglich Verbesserungen vorgenommen. Wir können es als Eigenschaft der Tabellenansicht selbst festlegen.

0voto

Tamás Sengel Punkte 51405

Schnelle Version von Die Antwort von Simon Lee :

tableView.beginUpdates()
tableView.endUpdates()

Denken Sie daran, dass Sie die Höheneigenschaften ändern sollten BEVOR endUpdates() .

0voto

sRoy Punkte 267

Eingänge -

tableView.beginUpdates() tableView.endUpdates() rufen diese Funktionen nicht

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {}

Aber wenn Sie es tun, tableView.reloadRows(at: [selectedIndexPath! as IndexPath], with: .none)

Sie ruft die func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {} diese Funktion.

-1voto

Dzamir Punkte 145

Ich habe dieses Problem gerade mit einem kleinen Hack gelöst:

static int s_CellHeight = 30;
static int s_CellHeightEditing = 60;

- (void)onTimer {
    cellHeight++;
    [tableView reloadData];
    if (cellHeight < s_CellHeightEditing)
        heightAnimationTimer = [[NSTimer scheduledTimerWithTimeInterval:0.001 target:self selector:@selector(onTimer) userInfo:nil repeats:NO] retain];
}

- (CGFloat)tableView:(UITableView *)_tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
        if (isInEdit) {
            return cellHeight;
        }
        cellHeight = s_CellHeight;
        return s_CellHeight;
}

Wenn ich die Zellenhöhe erweitern möchte, setze ich isInEdit = YES und rufen die Methode [self onTimer] und animiert das Zellwachstum bis zum Erreichen des s_CellHeightEditing-Wertes :-)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X