2010-09-30 28 views
4

Je suis nouveau dans le stack overflow et dans le développement de cacao-touch.Largeur de detailTextLabel sur la cellule avec UITableViewCellStyleValue2 style

J'essaye de construire un UITableViewCell utilisant le UITableViewCellSytleValue2 avec un detailTextLabel multi-ligne.

donc je mis en œuvre le tableView: heightForRowAtIndexPath: comme ça:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 

if (indexPath.row != 4) { 
    return tableView.rowHeight; 
} 

NSString *text = toDoItem.note; 
UIFont *font = [UIFont systemFontOfSize:[UIFont systemFontSize]]; 
CGSize withinSize = CGSizeMake(167, 1000); 
CGSize size = [text sizeWithFont:font constrainedToSize:withinSize lineBreakMode:UILineBreakModeCharacterWrap]; 

CGFloat height = size.height + 26; 

    return height;  
} 

Je compris la largeur de la detailTextLabel est d'environ 167px, mais veulent savoir exactement et ne l'aime pas hardcoded (compte tenu des changements d'orientation) .

J'ai essayé d'accéder au cadre ou aux limites de detailTextLabel, mais il renvoie 0.0 pour sa largeur.

Merci pour votre aide!

+1

J'ai travaillé avec 200px à une taille de police de 15. Cela fonctionne très bien pour moi. – testing

Répondre

0

Créer une cellule personnalisée

+1

Merci pour votre réponse, mais en fait je ne veux pas :-). Je ne peux pas imaginer qu'il n'est pas possible de déterminer la largeur de cette étiquette, car elle a évidemment une largeur fixe. – nubbel

0

Vous pouvez définir un ensemble statique de variables dans une implémentation personnalisée de UITableViewCell qui définit ces sortes de paramètres dans layoutSubviews si et seulement si pas défini. Assurez-vous d'appeler le [super layoutSubviews] en premier.

De cette façon, vous héritez des paramètres par défaut de l'appareil, et vous n'avez jamais à vous demander. AFAIK, la largeur de la cellule est self.contentView.frame.size.width
Vous pouvez utiliser self.textLabel.frame.size.width et self.detailTextLabel.frame.size.width, et self.accessoryView.frame.size.width + padding entre chacun pour comprendre les détails. Je ne suis pas à 100% sur le rembourrage. Mais, vous pouvez calculer le remplissage en détectant la différence entre les largeurs d'étiquettes et la largeur du cadre contentView.

Désolé. J'ai oublié les dimensions detailTextLabel de la cellule sont toujours en flux; et certainement ne pas être invoqué sur la période. Vous pouvez dériver la largeur de l'étiquette en fonction de la largeur du propriétaire UIViewController et des cellules textLabel. Puisque le calcul est au niveau du contrôleur, vous saurez si le tableauView est groupé. Et si c'est le cas, vous pouvez simplement redimensionner la largeur d'un facteur de 0,8 ou moins, et soustraire la largeur textLabel. Pour les polices: self.textLabel.font.pointSize et self.detailTextLabel.font.pointSize.