2012-10-21 13 views
11

Ich habe eine UITableView mit einer variablen Anzahl von Zeilen (Zellen) - die Höhe dieser Zeilen ist konstant. Ich möchte, dass die Höhe von UITableView von der Anzahl der Zeilen abhängt.UITableView Höhe basierend auf der Anzahl der Zellen

Auch möchte ich die UITableView genau die Zellen umhüllen, also keine Polsterung an der Unterseite. Wenn also eine Zelle die Höhe 60 hat, sollte die Tabellenansicht 60 für eine Zelle, 120 für zwei Zellen usw. sein.

Vielen Dank im Voraus!

Antwort

28

Sie können auf Ihre Datenquelle zugreifen, um die Anzahl der Zellen zu ermitteln, die angezeigt werden. Multiplizieren Sie diese Zahl mit der Höhe einer Zeile und Sie erhalten die Höhe der gesamten Tabellenansicht. Um die Höhe einer Tabellenansicht zu ändern, können Sie ihre Rahmeneigenschaft ändern.

Sie können auf die (konstante) Höhe einer Zeile Ihrer Tabellenansicht zugreifen, indem Sie auf deren -Eigenschaft zugreifen. Wenn Sie Ihre Tabellenansicht mit den Objekten eines Arrays myArray genannt füllen, könnten Sie den folgenden Code verwenden:

CGFloat height = self.tableView.rowHeight; 
height *= myArray.count; 

CGRect tableFrame = self.tableView.frame; 
tableFrame.size.height = height; 
self.tableView.frame = tableFrame; 

Sie auch herausfinden können, wie viele Zeilen die Tabellenansicht mit der Frage der Tabellen-Ansicht selbst enthalten wird, statt des Datenobjekts. So etwas sollte funktionieren:

NSInteger numberOfCells = 0; 

//finding the number of cells in your table view by looping through its sections 
for (NSInteger section = 0; section < [self numberOfSectionsInTableView:self.tableView]; section++) 
    numberOfCells += [self tableView:self.tableView numberOfRowsInSection:section]; 

CGFloat height = numberOfCells * self.tableView.rowHeight; 

CGRect tableFrame = self.tableView.frame; 
tableFrame.size.height = height; 
self.tableView.frame = tableFrame; 

//then the tableView must be redrawn 
[self.tableView setNeedsDisplay]; 
+0

Danke, dass Sie sich die Zeit nehmen zu Löse dieses Problem. Ich habe Ihren (für meinen Fall angepassten) Code in meine viewDidLoad-Methode injiziert, aber die Größe von UITableView wird nicht geändert. –

+0

Ich habe ein anderes Beispiel für Sie hinzugefügt, hoffe es hilft. –

+4

Nun, die Anzahl der Zellen zu finden ist nicht das Problem und die Berechnung der Höhe ist auch nicht. Es ist die Tatsache, dass sich die Höhe des tableView-Rahmens nicht ändert (liegt das vielleicht daran, dass mein Code in ViewDidLoad lebt? –

2

So habe ich gelöst.

CGFloat height = self.mMyTicketTable.rowHeight; 

float h = height * [self.mArrEName count]; 
if(h > 410.0) 
{ 
    self.mMyTicketTable.frame = CGRectMake(0, 50, self.mMyTicketTable.frame.size.width, 410); 
} 
else 
{ 
    self.mMyTicketTable.frame = CGRectMake(0, 50, self.mMyTicketTable.frame.size.width, h); 
} 
NSLog(@"h:%f", h); 
2

Implementieren Sie diese UITableView Delegatmethode. Jedes Mal, wenn eine Zeilenzelle schafft es Höhe

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return 60.0f; 
} 

jede Zelle zuweisen und diesen Code in viewDidLoad Methode

[yourTableView setFrame:CGRectMake(yourTableView.frame.origin.x, yourTableView.frame.origin.y, yourTableView.frame.size.width,(60.0f*([yourArray count])))]; 

Hinweis implementieren: - yourArray ist eine NSArray, die Daten enthalten, dass, wie viele Zeilen Sie wollen kisten.

OR

Wenn yourArray Abrufen Wert nennt dynamisch dann diese Methode nach dem Wert abgerufen werden.

-(void)setHeightOfTableView 
{ 

    /**** set frame size of tableview according to number of cells ****/ 
    float height=60.0f*[yourArray count]; 

[yourTableView setFrame:CGRectMake(yourTableView.frame.origin.x, yourTableView.frame.origin.y, yourTableView.frame.size.width,(60.0f*([yourArray count])))]; 
} 

Ich hoffe, es funktioniert. Dank

2

habe ich eine Funktion, um die UITableView Höhe einzustellen, wie pro @ timvermeulen Code

-(void)setTableViewheightOfTable :(UITableView *)tableView ByArrayName:(NSArray *)array 
{  
    CGFloat height = tableView.rowHeight; 
    height *= array.count; 

    CGRect tableFrame = tableView.frame; 
    tableFrame.size.height = height; 
    tableView.frame = tableFrame; 
} 
0

Wenn Sie mögen, tableView:numberOfRowsInSection: die delegierte Methode verwenden, um die UITableView Höhe dynamisch einzustellen, wie folgt aus:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

    CGFloat numberOfRows = self.myArray.count; 

    CGRect tableViewFrame = tableView.frame; 
    tableViewFrame.size.height = numberOfRows * tableView.rowHeight; 
    tableView.frame = tableViewFrame; 

    return numberOfRows; 
} 

Denken Sie daran, auch die rowHeight zu definieren, wo Sie die Tabellenansicht initiieren:

self.myTableView.rowHeight = 60.0; 

...aber wenn Ihr Ziel ist einfach leer Zellen in der Tabelle zu verstecken, sollten Sie eine leere Ansicht hinzufügen, um es tableFooterView stattdessen ist und ignorieren alle den Code oben (also versuchen, diese zuerst):

self.myTableView.tableFooterView = [UIView new]; 
Verwandte Themen