Après iOS 7, l'approche styleString ne fonctionne plus.
Deux nouvelles alternatives sont disponibles.
Tout d'abord, TextKit ; un nouveau moteur de mise en page puissant. Pour modifier l'espacement des lignes, il faut définir le délégué du gestionnaire de mise en page de l'UITextView :
textView.layoutManager.delegate = self; // you'll need to declare you implement the NSLayoutManagerDelegate protocol
Puis remplacez cette méthode déléguée :
- (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 l'espacement des lignes de NSParagraphStyle. Cela donne encore plus de contrôle, par exemple l'indentation de la première ligne, et le calcul d'un rectangle de délimitation. 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, e.g NSFontAttributeName
self.textView.attributedText = [[NSAttributedString alloc] initWithString:@"Hello World over many lines!" attributes:attrsDictionary];
Pour information, l'ancienne méthode ContentInset permettant d'aligner le texte sur le bord gauche de UITextView est également inutile sous iOS7. Il faut plutôt supprimer la marge :
textView.textContainer.lineFragmentPadding = 0;