6
votes

Briser Nstring dans des lignes (pour s'adapter à la largeur souhaitée)

J'essaie d'obtenir une nstring cassé dans des lignes pour s'adapter à une largeur souhaitée (comme cela se produirait à l'intérieur de Taillewithfont: contraintTosize: ). Y a-t-il une meilleure façon de le faire que deviner où les pauses se produiraient dans taillewithfont ?


2 commentaires

Pourriez-vous aller dans un peu plus de détails sur la raison pour laquelle vous avez besoin des lignes séparées? Si vous voulez simplement dessiner la chaîne dans un espace donné, cela est assez simple.


Je crée un fond - comme celui que vous obtenez lors de la sélection du texte - pour une étiquette. La largeur varie pour chaque ligne (avec une longueur différente), donc j'en aurai besoin séparément.


4 Réponses :


1
votes

update: Ceci s'applique apparemment uniquement sur la plate-forme MAC. Bien que NslayoutManager soit spécifiquement référencé dans le guide de dessin de chaîne de l'iPhone (à partir de décembre 2009), ni elle ni Nsattributedstring ne sont disponibles sur la plate-forme iPhone. Désolé pour le bruit.

réponse originale

NslayoutManager Est votre ami si vous souhaitez diviser la ficelle elle-même en lignes d'une certaine largeur, avec un ensemble donné d'attributs (c'est-à-dire que vous devez connaître les endroits réels où la chaîne est enveloppée).

Si vous cherchez seulement à envelopper des lignes lorsque dessin et que vous ne vous souciez pas d'où, les méthodes de Nsattributedstring (ajoute AppKit) - Drawinrect: ou < Un href = "http://developer.apple.com/mac/library/documentation/cocoa/reeference/ApplicationKit/classes/nsattributedstring_appkitadditions/reference/reference.html#//apple_ref/doc/uid/20000167-cjbifbbb" rel = "NOFOOLS NOREFERRER"> - DrawwithPrect: Options: fera exactement bien.


3 commentaires

Ni NslayoutManager ni Nsattributedstring ne sont disponibles sur l'iPhone.


Je ne vais pas dessiner les lignes (immédiatement), donc ni Nsattribudingstring ni nstring + uikit ajouts ne vont aider.


Ole: déroutant. NslayoutManager est spécifiquement référencé dans le Guide de programmation String dans la bibliothèque de l'iPhone DeV Center: développeur.apple.com/iphone/library/documentation/cocoa/...



2
votes

Si NslayoutManager est en effet indisponible, vous pouvez être bloqué avec une solution plus inefficace: en commençant par le premier mot de la chaîne, ajoute à chaque mot ultérieur et à l'aide de la taille . > (etc.) Méthode sur la chaîne résultante. Lorsque la hauteur des modifications apportées CGSize retournées , le mot le plus récemment annexe était celui qui a provoqué la pause de ligne et vous pouvez ainsi diviser la chaîne là-bas.


0 commentaires

1
votes

mise à jour: strong> basé sur le commentaire ci-dessous (vous pouvez dessiner la chaîne, mais vous ne pouvez pas dessiner un arrière-plan pour couvrir la chaîne), je pense que votre meilleur choix serait d'utiliser une UIWebView et d'utiliser CSS pour dessiner votre arrière-plan.


le NSString Uikit ajouts pourrait correspondre à vos besoins, en particulier p>

- (CGSize)drawInRect:(CGRect)rect withFont:(UIFont *)font 
       lineBreakMode:(UILineBreakMode)lineBreakMode
           alignment:(UITextAlignment)alignment;


1 commentaires

Consultez les commentaires sur la question et la réponse de Joshua ci-dessous - Soulignez les lignes N'est-ce pas le problème. Il a en fait besoin de savoir où sont les pauses de la ligne, dans le but de dessiner un arrière-plan qui ne s'étend qu'à la fin de chaque ligne.



1
votes

NslayoutManager est disponible depuis iOS 7. La documentation est ici .


0 commentaires