/ / die Zeilenhöhe entsprechend der Größe der Zeichenkette einstellen? - iPhone, iOS, iPad

Einstellen der Zeilenhöhe entsprechend der Größe der Zeichenfolge? - iphone, ios, ipad

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 № 1

Ich 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:

  1. Die Schriftgröße des Etiketts (das Sie bei 13.0 fest codiert haben)
  2. 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.