Changement dynamique de la hauteur UITableViewCell dans l'iPhone?
-
27-10-2019 - |
Question
J'ai trois UILabel personnalisé dans UITableViewCell. La conception des cellules comme celui-ci,
Date(12.1.2012) Time(12.00pm)
Cost: $20.00
Details
I ai précisé la hauteur de la ligne 100 en - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
. Mais, maintenant les détails quelques fois reviennent à vide (nul) à partir du serveur. En ce moment-là que je dois enlever l'étiquette Détails de la cellule et changer la hauteur à 70 cellulaire particulier (ligne) Comment puis-je faire cela? Je cherchai mon mieux dans Google. Mais, je reste juste confus pour le faire. Pouvez-vous m'aider s'il vous plaît? Merci. Je suis une idée de ce lien - http://www.cimgf.com/2009/09/23/uitableviewcell-dynamic-height/
. Ils ont utilisé une seule étiquette pour redimensionner la hauteur de ligne. S'il vous plaît aidez-moi.
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 90;
}
- (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];
UILabel *dateLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 100, 30)];
dateLabel.tag = 100;
dateLabel.backgroundColor = [UIColor clearColor];
dateLabel.font = [UIFont fontWithName:@"Helvetica" size:16];
dateLabel.font = [UIFont boldSystemFontOfSize:16];
dateLabel.highlightedTextColor = [UIColor whiteColor];
[cell.contentView addSubview: dateLabel];
UILabel *timeLabel = [[UILabel alloc] initWithFrame:CGRectMake(120, 0, 200, 25)];
timeLabel.tag = 101;
timeLabel.backgroundColor = [UIColor clearColor];
timeLabel.font = [UIFont fontWithName:@"Helvetica" size:14];
timeLabel.highlightedTextColor = [UIColor whiteColor];
[cell.contentView addSubview: timeLabel];
UILabel *costLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 30, 300, 25)];
costLabel.tag = 102;
costLabel.backgroundColor = [UIColor clearColor];
costLabel.font = [UIFont fontWithName:@"Helvetica" size:14];
costLabel.font = [UIFont boldSystemFontOfSize:14];
costLabel.highlightedTextColor = [UIColor whiteColor];
[cell.contentView addSubview: costLabel];
UILabel *eventLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 60, 300, 25)];
eventLabel.tag = 103;
eventLabel.backgroundColor = [UIColor clearColor];
eventLabel.font = [UIFont fontWithName:@"Helvetica" size:14];
eventLabel.font = [UIFont boldSystemFontOfSize:14];
eventLabel.highlightedTextColor = [UIColor whiteColor];
[cell.contentView addSubview: eventLabel];
}
UILabel *dateLabel = (UILabel *) [cell.contentView viewWithTag:100];
dateLabel.text = [DateArray objectAtIndex:indexPath.row];
UILabel * timeLabel = (UILabel *) [cell.contentView viewWithTag:101];
timeLabel.text = [timeArray objectAtIndex:indexPath.row];
UILabel * costLabel = (UILabel *) [cell.contentView viewWithTag:102];
costLabel.text = [costArray objectAtIndex:indexPath.row];
UILabel *eventLabel = (UILabel *) [cell.contentView viewWithTag:103];
NSString *description = [eventArray objectAtIndex:indexPath.row];
if([description isEqualToString:@""])
{
eventLabel.text = @""; // Here i don't want to show this label and resize(reduce) the row height to 60;
}
else
{
eventLabel.text = description;
}
return cell;
}
Comment puis-je faire cela? Merci.
La solution
En retournant la hauteur, vérifier si la description de détail est vide. Si elle est de retour 60.
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *description = [eventArray objectAtIndex:indexPath.row];
if([description isEqualToString:@""])
return 60
else
{
return 90;
}
}
, vous devez également retirer l'étiquette avec @"Details"
dans la même instruction if cellForRowAtIndexPath:
. Tag avance, l'identifier des sous-vues et le retirer de la cellule.
Autres conseils
Vous pouvez vérifier la taille de la chaîne de retour en utilisant CGSize
comme ça -
CGSize size = [detailStr sizeWithFont:[UIFont boldSystemFontOfSize:12.0f] constrainedToSize:CGSizeMake(190, 40) lineBreakMode:UILineBreakModeWordWrap];
vous pouvez modifier la largeur, la hauteur et la police en fonction de votre condition. Veuillez également vérifier si detailStr n'est pas égal à zéro avant de calculer la taille.