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): 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? p> p>
6 Réponses :
Vous devez redimensionner le cadre d'étiquettes. Essayez: [Étiquette Sizetofit]; P>
Pas sur Sizetofit, je veux juste savoir exactement la hauteur exacte de la multi-étiquette
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; }
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.
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.
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> p> sortie strong> p> Sortie de la console forte> p> Swift 2.2 strong> p>
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: 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> 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;
}
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.
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?