(Xcode10.1,Swift,iOS 11和12) 问题:如何在UITextField中增加插入符号/光标的高度
到目前为止我尝试过的事情: 我做到了这一点,问题解决了。
class BPTextField: UITextField {
override func caretRect(for position: UITextPosition) -> CGRect {
//CGRect rect = [super caretRectForPosition:position];
var rect = super.caretRect(for: position)
let h = self.frame.height - 5
let y_ = (self.frame.height - h)/2
rect.origin.y = y_
rect.size.height = h;
return rect;
}
}
但是,当我更改键盘语言(从英语 - 印度语到日语 - 假名)并键入单个字符时,插入符号/光标在TextField中向上移动。
请帮我
我已经通过这些链接, How to make the height of the cursor same with the height of text in UITextField? UITextView lineSpacing make cursor height not same
编辑我正在使用YYText
库,我将这个BPTextField
插入YYLabel
作为NSAttributedStringAttachment
这是NSAttributedString,
let main = NSMutableAttributedString(string: text_)
main.yy_color = .darkGray
main.yy_font = questionFont
main.yy_lineSpacing = 5.0
main.yy_lineBreakMode = .byWordWrapping
//附件
let attachment = NSMutableAttributedString.yy_attachmentString(withContent: self.tf, contentMode: UIView.ContentMode.center, attachmentSize: self.tf.frame.size, alignTo: questionFont, alignment: YYTextVerticalAlignment.bottom)
attachment.yy_baselineOffset = -5.0
root.append(attachment)
// BPTextField
self.tf = BPTextField(frame: CGRect(origin: CGPoint.init(x: 0, y: 13), size: CGSize(width: tfWidth.width + 7.5, height: tfWidth.height + 13.0)))
self.tf.borderStyle = UITextField.BorderStyle.none
self.tf.tag = 0
self.tf.font = questionFont
self.tf.autocorrectionType = UITextAutocorrectionType.no
self.tf.textColor = .darkGray
self.tf.setRoundedCorners(corners: UIRectCorner.allCorners, withRadius: 4.0)
// self.tf.setLeftPaddingPoints(5.0)
// self.tf.setRightPaddingPoints(0.0)
self.tf.backgroundColor = #colorLiteral(red: 0.9058823529, green: 0.9529411765, blue: 1, alpha: 1)
self.tf.tintColor = #colorLiteral(red: 0.2196078431, green: 0.6156862745, blue: 1, alpha: 1)
self.tf.returnKeyType = .done
self.tf.delegate = self
你可以用下面的方式计算origin y
,
override func caretRect(for position: UITextPosition) -> CGRect {
var rect = super.caretRect(for: position)
let size = CGSize(width: rect.size.width, height: self.frame.height - 5)
// Calculating center y
let y = rect.origin.y - (size.height - rect.size.height)/2
rect = CGRect(origin: CGPoint(x: rect.origin.x, y: y), size: size)
return rect
}