2013-10-16 2 views
3

Je me suis cogné la tête contre un mur pendant trop longtemps. Je voudrais créer un texte d'entrée à double interligne avec le curseur restant la même que la hauteur de ligne de la police.iOS UITextView: Augmentez l'interligne sans modifier la hauteur du curseur?

J'ai essayé plusieurs approches:

  • L'utilisation délégué NSLayoutManager de -layoutManager: lineSpacingAfterGlyphAtIndex: withProposedLineFragmentRect:
  • En utilisant une chaîne attribuée et la mise de -lineHeightMultiple de NSParagraphStyle et les propriétés -lineSpacing
  • L'utilisation d'un NSTextStorage personnalisé qui a également essayé de définir ce style de paragraphe.

... mais ils se retrouvent tous avec un carat trop grand, qui s'étend soit dans l'espace supérieur soit dans l'espace sous chaque ligne.

Avez-vous des idées sur ce que je peux essayer pour réaliser cette mise en page?

Répondre

5

Si vous avez déjà souhaité la mise en page et le problème est de taille juste de caret, vous pouvez simplement sous-classe UITextView et remplacer la méthode suivante:

- (CGRect)caretRectForPosition:(UITextPosition *)position 
{ 
    CGRect *originalRect = [super caretRectForPosition:position]; 
    // Resize the rect. For example make it 75% by height: 
    originalRect.size.height *= 0.75; 
    return originalRect; 
} 

Cela va faire l'affaire, cela fonctionne aussi bien sur iOS6 et 7 pour moi

+1

Parfait! L'effet exact que je voulais était: originalRect.size.height = self.font.lineHeight mais cela résout absolument mon problème de mise en page. Merci! – cdownie

Questions connexes