开发过程遇到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)
}
网友评论