Ich habe eine Anwendung, in der ich ändern möchtemeine Höhe der Zelle entsprechend dem Inhalt der empfangenen Nachrichtenzeichenfolge. Ich mache das in der nebenstehenden Delegate-Methode der Tabellenansicht.
int rowHeight =0.0f;
UITableViewCell *cell = [ self.mtableview cellForRowAtIndexPath:indexPath.row];
CGSize size = [cell.textLabel.text sizeWithFont:[UIFont systemFontOfSize:13.0f] constrainedToSize:CGSizeMake(300, 5000) lineBreakMode:UILineBreakModeWordWrap];// calculate the height
rowHeight = size.height+10; // I use 10.0f pixel extra because depend on font
return rowHeight;
Aber in meiner Anwendung kommt es nicht zum Absturz. Kann sich jemand das ansehen?
Antworten:
1 für die Antwort № 1Ich würde dich gerne sehen cellForRowAtIndexPath
Methode, um zu verstehen, wie Sie den Text für das Etikett abrufen.
Mit Calling sind Sie auf dem richtigen Weg sizeWithFont
Sie benötigen jedoch zwei Dinge, um dies erfolgreich zu bestimmen:
- Die Schriftgröße des Etiketts (das Sie bei 13.0 fest codiert haben)
- Und der Text, um die Größe zu bestimmen (den Sie aus dem UILabel ziehen möchten)
(Die Schriftgröße wurde im Code bei 13 fest codiert.0 ist nicht unbedingt eine gute Idee, denn wenn Sie es für die Zelle ändern möchten, müssen Sie daran denken, es in heightForRowAtIndexPath und wo auch immer zu ändern, aber das ist ein anderes Problem.
Anstatt den Text für das Etikett aus der UILabel
Ermitteln Sie selbst den Text anhand der Datenstruktur, die Sie erstellt haben bzw. die den Text enthält. Deshalb sehen Sie Ihre cellForRowAtIndexPath
Methode wäre hilfreich.
Ruf nicht an cellForRowAtIndexPath
von heightForRowAtIndexPath
Die Methoden sind auch nicht dazu gedacht, auf diese Weise verwendet zu werden.
Hier ist ein einfaches Beispiel, das ich verfeinern kann, wenn Sie Ihre cellForRowAtIndexPath
Code:
//ASSUME that self.arrayOfStrings is your data structure where you are retrieving the label"s text for each row.
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
int rowHeight =0.0f;
NSString *stringToSize = [self.arrayOfStrings objectAtIndexPath:indexPath.row];
CGSize size = [stringToSize sizeWithFont:[UIFont systemFontOfSize:13.0f] constrainedToSize:CGSizeMake(300, 5000) lineBreakMode:UILineBreakModeWordWrap];
rowHeight = size.height+10;
return rowHeight;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
cell.textLabel.text = [self.arrayOfStrings objectAtIndexPath:indexPath.row];
return cell;
}
0 für die Antwort № 2
Löschen UITableViewCell *cell = [ self.mtableview cellForRowAtIndexPath:indexPath.row];
von Ihrem Code. Sie müssen keine Zelle in der HeightForRow-Methode hinzufügen.