2013-11-26 8 views
17

私はUITextviewNSMutableParagraphStyleを使用して、各行テキストの間に行間を追加しています。iOS - UITextView lineSpacingはカーソルの高さを同じにしない

テキストビューに何かを入力すると、カーソルの高さは正常です。しかし、カーソル位置を2行目(最後の行ではない)のテキストに移動すると、カーソルの高さが大きくなります。

enter image description here

私は、テキストのすべての行にカーソルの高さが通常にするために何をすべきか? これは私が現在使用しているコードです:

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}]; 

答えて

23

は、最後に私は私の問題を解決する解を得ます。

UITextViewをサブクラス化してカーソルの高さを変更し、caretRectForPosition:position関数をオーバーライドすることができます。たとえば、次のように

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

ドキュメントへのリンク:https://developer.apple.com/documentation/uikit/uitextinput/1614518-caretrectforposition

+2

は、これは、文書化の方法ですか? (編集:はい、 'UITextInput'プロトコルにあり、' UITextView'はそれに準拠しています(https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UITextInput_Protocol/index.html#//apple_ref/occ/intf/UITextInput) – oztune

+0

本当に便利、親指アップ! – KkMIW

+0

このテキストを選択すると、ハンドルは本当に大きなです、それを修正する方法はありますか? –

7

そしてスウィフト2. Xまたはスウィフト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 
    } 
} 
関連する問題