美文网首页常见错误收集
解决UITextField输入中文时,文字往下偏移的问题

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

作者: Bytesking | 来源:发表于2017-11-07 13:08 被阅读57次

    开发过程遇到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输入中文时,文字往下偏移的问题

        本文链接:https://www.haomeiwen.com/subject/gptjmxtx.html