Définir la hauteur de ligne dans UITextView

Je suis déjà sûr que cela ne peut être fait avec aucune API publique, mais je veux quand même demander:

Existe-t-il un moyen de modifier la hauteur de ligne dans UITextView?

Serait suffisant pour le faire statiquement, pas besoin de le changer à l’exécution. Le problème est que la hauteur de ligne par défaut est tout simplement trop petite. Le texte aura l’air extrêmement compressé et est un cauchemar lorsque vous essayez d’écrire des textes plus longs.

merci, Max

EDIT: Je sais qu’il ya UIWebView et que c’est agréable et peut faire du style, etc. Mais ce n’est pas éditable . J’ai besoin d’un composant de texte modifiable avec une hauteur de ligne acceptable. Ce qui vient des frameworks Omni n’aide pas non plus, car il est trop lent et ne se sent pas bien …

Après iOS 7, l’approche styleSsortingng ne fonctionne plus.

Deux nouvelles alternatives sont disponibles.

Tout d’abord, TextKit; un nouveau moteur de mise en page puissant. Pour modifier l’interligne, définissez le délégué du gestionnaire de disposition de UITextView:

 textView.layoutManager.delegate = self; // you'll need to declare you implement the NSLayoutManagerDelegate protocol 

Remplacez ensuite cette méthode de délégué:

 - (CGFloat)layoutManager:(NSLayoutManager *)layoutManager lineSpacingAfterGlyphAtIndex:(NSUInteger)glyphIndex withProposedLineFragmentRect:(CGRect)rect { return 20; // For really wide spacing; pick your own value } 

Deuxièmement, iOS 7 prend désormais en charge le paramètre lineSpacing de NSParagraphStyle. Cela donne encore plus de contrôle, par exemple l’indentation de la première ligne et le calcul d’un rectangle englobant. Donc alternativement …

 NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; paragraphStyle.headIndent = 15; // <--- indention if you need it paragraphStyle.firstLineHeadIndent = 15; paragraphStyle.lineSpacing = 7; // <--- magic line spacing here! NSDictionary *attrsDictionary = @{ NSParagraphStyleAttributeName: paragraphStyle }; // <-- there are many more attrs, eg NSFontAttributeName self.textView.attributedText = [[NSAttributedString alloc] initWithString:@"Hello World over many lines!" attributes:attrsDictionary]; 

FWIW, l'ancienne méthode contentInset pour aligner le texte le long du bord gauche de UITextView est également inutile sous iOS7. Au lieu de cela, supprimer la marge:

 textView.textContainer.lineFragmentPadding = 0; 

Remarque: ceci n’est pas disponible dans iOS7:


J’ai découvert que vous pouvez créer une sous-classe qui implémente à nouveau [UITextView styleSsortingng] :

 @interface UITextView () - (id)styleSsortingng; // make comstackr happy @end @interface MBTextView : UITextView @end @implementation MBTextView - (id)styleSsortingng { return [[super styleSsortingng] ssortingngByAppendingSsortingng:@"; line-height: 1.2em"]; } @end 

Ceci n’est pas une utilisation privée de l’API: il ne s’agit que de sous-classement. Il est possible qu’Apple ne soit pas du même avis (bien que nous ayons tous l’habitude de tout changer pour personnaliser l’apparence de UIKit, je pense que ce type d’utilisation «privée» n’est pas ce à quoi Apple s’oppose), mais c’est un moyen facile les objectives de cette question que vous pouvez aussi bien essayer. Si l’application est rejetée, vous pouvez passer le temps (probablement significatif) sur une solution plus difficile.

La seule solution que nous avons trouvée et celle que nous avons choisie: créer une police personnalisée . Cela semble idiot mais semble être le seul moyen réaliste.

Dans l’inspecteur d’atsortingbuts pour UITextView, modifiez plutôt la propriété Text en Atsortingbuted (à partir de Plain ), puis cliquez sur le bouton "more" pour définir la hauteur et l’espacement des lignes.

Inspecteur d'attributs de UITextView

Le remplacement de la sous-classe UITextView de styleSsortingng ne fonctionne que si vous définissez une catégorie sur UITextView qui définit styleSsortingng, sinon vous obtenez une erreur de compilation. Par exemple, dans votre sous-classe UITextView:

 #import "SomeDangTextView.h" @interface UITextView () - (id)styleSsortingng; @end @implementation SomeDangTextView - (id)styleSsortingng { return [[super styleSsortingng] ssortingngByAppendingSsortingng:@"; line-height: 1.5em"]; } @end 

Selon la documentation d’Apple, vous pouvez utiliser une UIWebView.

Cette classe ne prend pas en charge plusieurs styles pour le texte. Les atsortingbuts d’alignement de police, de couleur et de texte que vous spécifiez s’appliquent toujours au contenu entier de la vue de texte. Pour afficher un style plus complexe dans votre application, vous devez utiliser un object UIWebView et rendre votre contenu en HTML.

Cette classe ne prend pas en charge plusieurs styles pour le texte. Les atsortingbuts d’alignement de police, de couleur et de texte que vous spécifiez s’appliquent toujours au contenu entier de la vue de texte. Pour afficher un style plus complexe dans votre application, vous devez utiliser un object UIWebView et rendre votre contenu en HTML.

Utilisez OHAtsortingbutedLabel Lib. Cela résoudra tout le problème que vous avez mentionné.