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中的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

UITextView中的光标位置

caret::train:指定模型生成参数

R语言使用caret包的getModelInfo函数获取caret包中提供的模型算法列表

无法在 caret 包中为 extraTrees 模型指定概率函数

在 R 代码中使用“caret”包中的 preProcess 的目的是啥?

在 R 中绘制由 caret 包训练的 SVM 线性模型