2009-06-29 4 views
2

Bonjour ist-il un moyen de diviser une chaîne pour UITableView à une ligne spécifique pour mettre le « repos » (la deuxième partie des données) dans une cellule proprede Split chaîne à la ligne spécifique pour NSString

NSString *data;  
CGsize *size = [data sizeOfStringWithFont:[UIFont systemFontOfSize:14] constrainToWidth:280.0]; 

si le size.height par exemple est supérieur à 1500 je veux diviser la chaîne à cette position de la ligne!

merci

Répondre

1

Utilisez « constrainedToSize » (au lieu de simplement à la largeur) et rendent autant que vous le pouvez. Si vous voulez vraiment prendre exactement le texte qui ne vous convient pas, vous devrez faire une recherche, en ajoutant un mot à la fois et ensuite faire la vérification de la taille pour voir à quel point vous avez obtenu. Vous pouvez commencer avec une estimation approximative en faisant toute la chaîne contrainte à quelque chose d'une seule ligne haute avec une largeur illimitée (disons 999999) et ensuite diviser la largeur en autant de lignes que vous souhaitez permettre d'obtenir un point de départ approximatif pour ajouter/enlever les mots de la chaîne (ce ne sera pas exact à cause de l'emballage des mots).

Fondamentalement, il semble préférable de prendre le texte restant et de le mettre dans une autre cellule. Êtes-vous vraiment sûr que vous ne voulez pas simplement changer la hauteur de la cellule avec le texte pour lui permettre de s'adapter à l'ensemble?

1

Je pense que Kendall a la bonne idée, mais les tailles contraintes devraient être inversées pour obtenir la hauteur exacte basée sur l'emballage des mots. Prenez un échantillon CGSize qui a la même largeur que votre cellule, mais avec une hauteur supérieure à la hauteur maximale que vous attendez. Dans l'exemple de code ci-dessous, textSize contiendra la hauteur de votre chaîne telle qu'elle apparaîtrait dans votre cellule avec une hauteur non limitée.

CGSize sz = CGSizeMake (
    yourCellWidth, 
    999999.0f); 

CGSize textSize = [yourString sizeWithFont:yourCellfont 
        constrainedToSize:sz 
        lineBreakMode:UILineBreakModeWordWrap]; 

Si la hauteur est supérieure à 1500, vous pouvez commencer à égrappage (substringWithRange) sous-chaînes de la fin et de les mesurer comme ci-dessus jusqu'à ce que vous obtenez quelque chose> = le reste supérieur à 1500 qui a été retourné par textSize.

Questions connexes