Caret / Cursor在UITextField中的奇怪行为
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Caret / Cursor在UITextField中的奇怪行为相关的知识,希望对你有一定的参考价值。
(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
}
以上是关于Caret / Cursor在UITextField中的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用caret包的getModelInfo函数获取caret包中提供的模型算法列表
无法在 caret 包中为 extraTrees 模型指定概率函数