3 Stimmen

IOS: Wie man die Höhe einer UITableView dynamisch einstellt

Ich habe ein Ansichtscontroller, der eine Tabelle enthält (siehe Screenshot unten). Diese Tabelle hat immer genau 3 Zeilen, und diese Zeilen werden bei einem Klick erweitert, um mehr Informationen anzuzeigen. Wie kann ich es so machen, dass die Höhe der Tabelle immer genau diese drei Zeilen und nicht mehr anzeigt? Wie Sie auf dem Screenshot sehen können, werden leere Zeilen ohne Inhalt angezeigt.

Beachten Sie, dass die erweiterten Zeilen Ansichten enthalten können, die keine UILabels sind.

So sieht es in IB aus:

Bildbeschreibung hier eingeben

5voto

Aditya Deshmane Punkte 4606

Ich denke, du brauchst so etwas wie das

//Rückgabe der Anzahl von Zeilen in der Sektion
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    [self setTableHeight];
    return 3;
}

//Methode, die es dir ermöglicht, die Höhe der Tabelle je nach deinen 3 Zellen zu berechnen
- (void)setTableHeight
{

    if(_isRowExpanded == NO)
    {
        tableHeightCalculated = rowHeight * 3; // rowHeight verwendet standardmäßig 44 oder dein eigenes
    }
    else
    {
        //Hier musst du einige Logik einfügen, um die Höhe von Expanded_Row_Height zu berechnen oder eine ungefähre Höhe festzulegen
        tableHeightCalculated = rowHeight * 2 + Expanded_Row_Height;

        if(tableHeightCalculated > maxHeightAllowed) //maxHeightAllowed ist die aktuelle Tabellenhöhe in der Momentaufnahme
        {
            tableHeightCalculated = maxHeightAllowed;
        }
    }
    tableView.frame = CGRectMake(tableView.frame.origin.x, tableView.frame.origin.y,
                                 tableView.frame.size.width,  tableHeightCalculated);
}

0voto

Wenn vertikal mehr Platz vorhanden ist als für die Anzeige der tatsächlichen Zellen benötigt wird, fügt die UITableView gefälschte leere Zellen ein. Sie können dieses Verhalten nicht wirklich kontrollieren, das Einzige, was Sie tun können, ist die Höhe Ihrer Tabelle auf etwas ausreichend Kleineres zu setzen.

0voto

Farrukh Javeid Punkte 634

Verwenden Sie die frame-Eigenschaft einer beliebigen Steuerung, die Sie über Programmierung manipulieren möchten. frame hat zwei weitere Eigenschaften von size und origin. Mit der size-Eigenschaft können Sie Breite und Höhe manipulieren und mit der origin-Eigenschaft können Sie die x- und y-Eigenschaft der Steuerung manipulieren. Was Sie möchten, kann durchgeführt werden über:

CGRect frame = control.frame; //control ist Ihre UIControl

frame.size.height = 10.0; //angenommen, 10 ist die gewünschte Höhe.

control.frame = frame;

Hoffentlich ist das das, wonach Sie suchen.

0voto

ricardohg Punkte 41

Versuchen Sie, den Fußbereich der Tabelle zu initialisieren:

TableView.tableFooterView = [[UIView alloc] init];

0voto

Nikunj Punkte 987

Fügen Sie diese footerview-Methode hinzu. Dies wird funktionieren. Dies wird die leeren Zellen entfernen.

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].applicationFrame.size.width, 0)];
v.backgroundColor = [UIColor clearColor];
[tableView setTableHeaderView:v];
[tableView setTableFooterView:v];
return v;
}

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