UITextField中的插入符/游标的怪异行为

时间:2018-12-07 08:32:23

标签: ios swift 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

1 个答案:

答案 0 :(得分:1)

您可以如下计算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
}