web-dev-qa-db-fra.com

Hauteur de cellule minimale avec UITableViewAutomaticDimension

Est-il possible de définir une hauteur minimale pour la cellule? J'utilise dynamique:

tableView.estimatedRowHeight = 83.0
tableView.rowHeight = UITableViewAutomaticDimension

Mais je dois définir une hauteur minimale pour la cellule lorsque mon news title label text est sur une ligne. 

15
aaisataev

Avez-vous essayé de créer une contrainte dans la vue de height >= 60.0 de votre UITableViewCell personnalisée?

44
Hytek

Je l'ai. Fait fonctionner comme ci-dessous.

Faites glisser et déposez une vue sur UITableViewCell et définissez les contraintes Leading, fin, haut et bas sur 0. Définissez la contrainte de hauteur sur> = ExpectedMinimumSize.

Dans heightForRowAtIndexPath Delegatemethodhod:

-(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath
{
    return UITableViewAutomaticDimension;
}

Dans ViewDidLoad:

self.tableView.estimatedRowHeight = 60; // required value.
8
YSR fan

@Hytek répond à une astuce. Pour cela, vous devez indiquer la contrainte de hauteur minimale.

Par exemple: S'il y a une UILabel dans votre cellule de tableau et que vous voulez que UILabel augmente la hauteur conformément au contenu dynamique. Et vous avez le code comme ci-dessous. 

tableView.estimatedRowHeight = 83.0
tableView.rowHeight = UITableViewAutomaticDimension

Il augmentera la hauteur de votre étiquette lorsque le contenu sera plus grand, mais diminuera également lorsque votre contenu sera petit Donc, si vous vous attendez à ce que l'étiquette ait une hauteur minimale, vous devez donner une contrainte de hauteur à votre UILabel d'une manière qui height >= 30.0 à votre étiquette.

 enter image description here

De cette façon, votre UILabel ne diminuera pas la hauteur inférieure à 30.0.

1
Bhavin_m
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return (UITableView.automaticDimension > minimumHeight) ? UITableView.automaticDimension : minimumHeight
}
0
Guest

Au code de présentation automatique de la cellule personnalisée (Interface Builder ou par programme), ajoutez les contraintes appropriées.

Par exemple. (Par programme dans une cellule personnalisée)

    UILabel * label = [UILabel new];
    [self.contentView addSubview:label];
    NSDictionary * views = NSDictionaryOfVariableBindings(label);
//Inset 5 px
    [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-5-[label]-5-|" options:0 metrics:nil views:views]];
    [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-5-[label]-5-|" options:0 metrics:nil views:views]];
// height >= 44
    [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:self.mainLabel attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:44.0]];
0
JapCon