2013-11-26 12 views
17

Sto usando NSMutableParagraphStyle nel mio UITextview per aggiungere lo spazio tra ogni riga di testo.iOS - UITextView lineSpacing rende l'altezza del cursore non uguale a

Quando digito qualcosa in TextView, altezza del cursore è normale. ma quando mi muovo posizione del cursore di testo al 2 ° fila (non l'ultima riga), l'altezza del cursore è sempre più grande.

enter image description here

Cosa devo fare per rendere l'altezza cursore normale in ogni riga dei testi? Questo è un codice Attualmente sto usando:

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; 
paragraphStyle.lineSpacing = 30.; 
textView.font = [UIFont fontWithName:@"Helvetica" size:16]; 
textView.attributedText = [[NSAttributedString alloc] initWithString:@"My Text" attributes:@{NSParagraphStyleAttributeName : paragraphStyle}]; 

risposta

23

Finalmente ho la soluzione che risolva il mio problema.

È possibile modificare l'altezza del cursore sottoclassando lo UITextView, quindi sovrascrivere la funzione caretRectForPosition:position. Per esempio: collegamento

- (CGRect)caretRectForPosition:(UITextPosition *)position { 
    CGRect originalRect = [super caretRectForPosition:position]; 
    originalRect.size.height = 18.0; 
    return originalRect; 
} 

Documentazione: https://developer.apple.com/documentation/uikit/uitextinput/1614518-caretrectforposition

+2

questo è un metodo documentato? (EDIT: Sì, è nel protocollo '' UITextInput' che UITextView' conforme alle (https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UITextInput_Protocol/index.html#//apple_ref/OCC/INTF/UITextInput). – oztune

+0

veramente utile, pollice in su! – KkMIW

+0

Quando si seleziona questo testo le maniglie sono davvero grande, qualche idea di come risolvere il problema? –

7

E per Swift 2. x o Swift 3. x:

import UIKit 

class MyTextView : UITextView { 
    override func caretRectForPosition(position: UITextPosition) -> CGRect { 
     var superRect = super.caretRectForPosition(position) 
     guard let isFont = self.font else { return superRect } 

     superRect.size.height = isFont.pointSize - isFont.descender 
      // "descender" is expressed as a negative value, 
      // so to add its height you must subtract its value 

     return superRect 
    } 
} 
Problemi correlati