6
votes

Comment obtenir exactement la hauteur d'Uilabel avec un espace de ligne?

J'écris une en-tête de TableView extensible, j'ai besoin de définir la hauteur de l'en-tête avec précision dans la méthode de déléguée de la TableView. J'utilise maintenant la méthode suivante pour calculer la hauteur de mon en-tête (une étiquette multiligne): xxx

Cependant, j'ai constaté que la hauteur calculée est à peu près le texte sans inclure l'espace ligne. Alors, comment puis-je obtenir la hauteur de l'espace de ligne de l'étiquette? Ou comment obtenir une hauteur précise de l'uilabel avec un espace de ligne?


1 commentaires

Quelqu'un me comprend-il? Comment obtenir la valeur = WordStotalHeight + (Linenum-1) * Espace de lignes. Cette méthode renvoie la mototalheight, mais comment obtenir la valeur de l'espace de lignes?


6 Réponses :


0
votes

Vous devez redimensionner le cadre d'étiquettes. Essayez: [Étiquette Sizetofit];


1 commentaires

Pas sur Sizetofit, je veux juste savoir exactement la hauteur exacte de la multi-étiquette



0
votes

Utilisez les méthodes ci-dessous pour les mêmes.

- (CGFloat)heightForWidth:(CGFloat)width usingFont:(UIFont *)font withText:(NSString *)aStrText
{
    CGSize labelSize = (CGSize){width, FLT_MAX};
    CGRect rect = [aStrText boundingRectWithSize:labelSize
                                         options:NSStringDrawingUsesLineFragmentOrigin
                                      attributes:@{NSFontAttributeName : font}
                                         context:nil];
    return rect.size.height;
}


1 commentaires

Le problème est que cette méthode ne renvoie que la hauteur des mots, sans inclure l'espace de ligne, si l'étiquette a plusieurs lignes, cette hauteur sera inférieure à la hauteur réelle.



0
votes
    override func viewDidLayoutSubviews() {
          super.viewDidLayoutSubviews()
          sizeToFit()

        }
       func sizeToFit(){
            let header = customHeaderView
            let height = header.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height;
            var headerFrame = header.frame

            headerFrame.size.height = height
            header.frame = headerFrame
            tableView.tableHeaderView = header;



    }
Hope this will help you. 

0 commentaires

8
votes

Vous pouvez obtenir la hauteur exacte de l'Uilabel avec exactement la même taille et le même type de police et de faire des calculs.
Ici, j'ai utilisé un Uilabel avec une police Helvetica avec la taille de la police 16.

Objectif C < / strong> xxx

sortie xxx

Sortie de la console xxx

Swift 2.2 xxx

EDIT xxx


0 commentaires

0
votes

En fait, je souhaite créer un en-tête de section extensible dans la vue de ma table, mais dans la méthode de déléguée: xxx pré>

Cette méthode doit renvoyer exactement la hauteur de mon en-tête d'étiquette, j'utilise La méthode suivante permettant de calculer la hauteur, mais la hauteur n'inclut pas l'espace de la ligne, mais uniquement la hauteur des mots; p> xxx pré>

car savoir plus sur sizetofit, voici une réponse réalisable p >

- (void)viewDidLoad {
    [super viewDidLoad];

    [self tableViewInit];
    [self headerInit];
}

- (void)tableViewInit {
    self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds];
    [self.view addSubview:_tableView];
    self.tableView.dataSource = self;
    self.tableView.delegate = self;
}

- (void)headerInit {
    CGRect originSize = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, CGFLOAT_MIN);
    self.header = [[UILabel alloc] initWithFrame:originSize];
    self.header.lineBreakMode = NSLineBreakByWordWrapping | NSLineBreakByTruncatingTail;
    self.header.text = self.headerStr;
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    if (self.showAll) {
        self.header.numberOfLines = 0;
        [self.header sizeToFit];
    } else {
        self.header.numberOfLines = 2;
        [self.header sizeToFit];
    }
    return self.header.bounds.size.height;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    return self.header;
}


0 commentaires

1
votes

Basé sur Rajan Maheshwari Répondre J'ai écrit cette fonction à Swift 3.0 pour une étiquette générique avec la hauteur de la ligne optionnelle. J'espère que cela aide. XXX


0 commentaires