UITextView lineSpacing делает высоту курсора не одинаковой
Я использую NSMutableParagraphStyle
в моем UITextview
для добавления пространства строк между каждой строкой текста.
Когда я набираю что-то в textview, высота курсора нормальная. но когда я перемещаю позицию курсора в текст во 2-й строке (не в последней), высота курсора становится больше.
Что я должен сделать, чтобы высота курсора была нормальной в каждой строке текста? Это код, который я сейчас использую:
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}];
2 ответа
Решение
Наконец я получаю решение, которое решает мою проблему.
Изменение высоты курсора возможно путем подкласса 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
А для Swift 2.x или 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
}
}