【问题标题】:Weird behaviour of Caret/Cursor in UITextFieldUITextField 中插入符号/光标的奇怪行为
【发布时间】:2018-12-07 08:32:22
【问题描述】:

(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

【问题讨论】:

    标签: ios swift uitextfield


    【解决方案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
    }
    

    【讨论】:

    • 我会尽力让您知道。感谢您的即时支持。
    • 是的,我试过了,但没有运气...但是为您的努力 +1。
    • 我已经为你编辑了我的问题。感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多