解决UITextField输入中文时,文字往下偏移的问题

开发过程遇到UITextField输入中文时,文字会向下偏移。有审美洁癖的人看着会不舒服,所以研究了下解决方式:
我的解决办法:

class FrankTextField: UITextField {

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.clipsToBounds = false
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.clipsToBounds = false
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        for view in self.subviews {
            if view is UIScrollView {
                let sView:UIScrollView = view as! UIScrollView
                var offset:CGPoint = sView.contentOffset
                if offset.y != 0 {
                    offset.y = 0
                    sView.contentOffset = offset
                }
                break
            }
        }
    }
}

UItextField上的文字实际上是UIFieldEditor类承载的,UIFieldEditor是UIScrollView的子类,所以发生偏移的时候我们把偏移值置为0就解决问题了。

网上还有三种解决方式,但是我测试没有效果,在这里还是做下记录:

方法一、
self.automaticallyAdjustsScrollViewInsets = false
方法二、
用代码设置清楚按钮
textField.clearButtonMode = UITextFieldViewModeWhileEditing
方法三、
//继承UITextField 重写方法
override func textRect(forBounds bounds: CGRect) -> CGRect {
        super.textRect(forBounds: bounds)
        return bounds.insetBy(dx: 2, dy: 1)
    }
    
    override func editingRect(forBounds bounds: CGRect) -> CGRect {
        super.editingRect(forBounds: bounds)
        return bounds.insetBy(dx: 2, dy: 1)
    }

你可能感兴趣的:(解决UITextField输入中文时,文字往下偏移的问题)